2011-01-18 5 views
2

버튼을 클릭 할 때 증가하는 텍스트 블록에서 카운터 값을 볼 수 있기를 바랍니다. 텍스트 블록에 바인딩해야합니다. 나는 그것을하기위한 올바른 방법이 무엇인지 궁금합니다.카운터 값을 텍스트 블록에 바인딩하는 방법은 무엇입니까?

XAML :

<TextBlock Text="{Binding Path=counter}" /> 
<Button x:Name="Nextbt" Content="Next" Click="ClickNextButton"/> 

C 번호 :

private void ClickNextButton(object sender, System.Windows.RoutedEventArgs e){ 
counter += 1; 
if (counter == 1) 
{ 

} 
if (counter == 2) 
{ 

}} 

미리 감사드립니다.

+0

현재 접근 방식에는 어떤 문제가 있습니까? –

+0

작동하지 않습니다. – vladc77

답변

3

1) 카운터 값을 반환하는 public 속성을 만듭니다. 다음과 같이 "카운터"
2) 마크 업을 변경 INotifyPropertyChanged을 구현하고 카운터 값
3)의 모든 변경하여 PropertyChanged (새 PropertyChangedEventArgs ("카운터"))를 호출 이름 :

<TextBlock Text="{Binding Path=counter,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}}" /> 

이것은 많은 경우 중 하나 일뿐입니다. This 링크를 누르면 DataBinding에 대한 개요로 연결됩니다. 나는이 문서가 위의 단계들을 분명히 할 것이라고 상상할 수있다.

만약 당신이, 당신의 의견을 여기에 예를 바랬다으로 업데이트

, 난 당신이 메인 창에있는 가정합니다. 위의 시퀀스에 대해 몇 가지를 변경했습니다. 생성자에 DataContext를 설정했습니다. 따라서 Binding에 상대 소스를 사용할 필요가 없습니다. 두 방법 모두 가능합니다 (둘 다 매우 우아하지는 않지만 WPF-Databinding을 배우려면 적절합니다). 어쩌면 둘 다 시도해 볼 수 있습니다. 유일한 차이점은 바인딩 선언과 생성자 코드입니다.

public partial class MainWindow : Window , INotifyPropertyChanged{  

     public event PropertyChangedEventHandler PropertyChanged; 
     int m_counter; 

     public MainWindow() { 
      InitializeComponent(); 
      DataContext=this; 
     } 


     public int Counter { 
      get { return m_counter; } 
      set { 
       if (m_counter != value) { 
        m_counter = value; 
        OnPropertyChanged(new PropertyChangedEventArgs("Counter")); 
       } 
      } 
     } 
     protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) {  
      if (null != PropertyChanged) {   
       PropertyChanged(this,e);  
      } 
     } 

     private void ClickNextButton(object sender, System.Windows.RoutedEventArgs e){ 
      Counter += 1; 
      if (Counter == 1) { } 
      if (Counter == 2) { } 
     } 

     Continue with class declaration... 

그리고 XAML :

 <TextBlock Text="{Binding Path=Counter}" /> 
     <Button x:Name="Nextbt" Content="Next" Click="ClickNextButton"/> 
+0

리드를 보내 주셔서 감사합니다. 어떤 샘플을 게시 할 수 있는지 궁금합니다. 아직 작동하지 못했습니다. 다시 감사합니다. – vladc77

+0

정말 잘됐다! 도와 줘서 고마워. 나는 그것을 아주 좋아한다. – vladc77

1

Counter 요구 사항은 결합 당신의 TextBlock을 위해서는 공용 속성으로 노출 될 수 있습니다. 바람직하게는 속성이 변경 알림을 구현해야합니다. 처음에는 MSDN's Data Binding overview을 참조하십시오!

+0

나는 공개적으로 만들었지 만 결과는 바뀌지 않았다. HCL에서 설명한 방식을 올바르게 구현해야합니다. 나는 그것이 더 간단 할 수 있기를 바라고 있었다. – vladc77

관련 문제