2017-09-10 16 views
-1

WinFormsからWPFに移動しようとしていますが、バインディングに固執しています。私が持っている、(FormInput命名)同じユーザーコントロールのCsに文字列変数をラベルにバインドする

<Label Name="labelState" Content="{Binding state}" HorizontalAlignment="Right" Margin="10,10,10,10" FontSize="12" /> 

私はラベルを持って

public string state { get; set; } 

    public FormInput() 
     { 
      state = "ok"; 

      InitializeComponent();   
     } 

しないのはなぜこの作品?

ありがとうございます。あなたがWPFで何かを結合している場合

答えて

0

あなたは

class TestObject : INotifyPropertyChanged 
    { 
     private string _state; 

     public string State 
     { 
      get 
      { 
       return _state; 
      } 

      set 
      { 
       if (_state == value) return; 

       _state = value; 
       OnPropertyChanged("State"); 
      } 
     } 

     #region INotifyPropertyChanged Members 

     public event PropertyChangedEventHandler PropertyChanged; 

     protected virtual void OnPropertyChanged(string propertyName) 
     { 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
      } 
     } 

     #endregion 
    } 

とあなたのFormInput

public FormInput() 
{ 
    InitializeComponent(); 
    TestObject t = new TestObject(); 
    labelState.DataContext = t; 
    t.State = "ok"; 
} 

やXAMLなどで、クラスは以下の実装INotifyPropertyChanged

を使用する必要があります続く、

<Label Name="labelState" Content="{Binding State}" HorizontalAlignment="Right" > 
+0

状態に依存プロパティまたはINotifyPropertyChanged-Patternがないため、これは機能しません。したがって、変更は初期化後には伝播しません。しかし、InitializeComponentは "状態"の初期状態を取る必要があります – CShark

+0

私は初期化後に移動しましたが、ラベルはまだ更新されません。また、このラベルを変数の更新として更新したい場合、これは機能しますか?または何かを追加する必要がありますか? – anti

+0

@anti check updated答え – Sajeetharan

関連する問題