2010-12-01 20 views
1

TextBoxのTextプロパティをベースオブジェクトのプロパティにバインドしましたが、うまくいくようです。残念ながら、プロパティの値をプログラム的に変更すると、GUI上で更新されないようです。ここでプロパティが変更されたときにWPF - バインドされたコントロールが更新されない?

は財産だ:

public string SealedDate 
{ 
    get 
    { 
     string result = string.Empty; 

     if (_DACase.SealedDate != DateTime.MinValue) 
     { 
      result = Formatting.FormatDate(_DACase.SealedDate); 
     } 

     return result; 
    } 
    set 
    { 
     DateTime theDate = DateTime.MinValue; 

     if (DateTime.TryParse(value, out theDate) 
      && _DACase.SealedDate != theDate) 
     { 
      _DACase.SealedDate = theDate; 
      base.OnChanged(); //fires event so I know the value of the object has changed 
     } 
    } 
} 

、別のプロパティは、それが設定されているとき、そのプロパティの値が設定されている:

public bool IsSealed 
{ 
    get 
    { 
     return _DACase.SealedId > 0 
      || _DACase.SealedDate != DateTime.MinValue; 
    } 
    set 
    { 
     if (value != (_DACase.SealedId > 0 || _DACase.SealedDate != DateTime.MinValue)) 
     { 
      if (value) 
      { 
       this.SealedId = Authentication.CurrentUser.Id; 
       this.SealedDate = Formatting.FormatDate(DateTime.Now); 
      } 
      else 
      { 
       this.SealedId = 0; 
       this.SealedDate = DateTime.MinValue.ToString(); 
      } 
      base.OnChanged(); 
     } 
    } 
} 

と更新されていないのTextBoxのXAMLを私はそうするべきだと思う:

<TextBox Name="txtSealedDate" Text="{Binding SealedDate}" Grid.Column="5" Grid.Row="3" IsReadOnly="True" /> 
+6

「OnChanged」とは何ですか?コードを投稿してください。あなたのクラスは 'INotifyPropertyChanged'を実装していますか? WPFは基本的にプロパティが変更されたことを知る2つの方法を持っています:プロパティは 'DependencyProperty'(あなたのコードではそうではありません)でなければなりません。あるいは、インクルードするクラスは' INotifyPropertyChanged'を実装する必要があります。 – Vlad

+0

OnChanged()はイベントのみを発生させます。何も気にしない。このイベントは、保存ボタンを有効にする必要があるかどうかを知らせるために処理されます。私のクラスは 'INotifyPropertyChanged'を暗示しません。私は今それを見てみましょう。 –

+1

'INotifyPropertyChanged'がトリックをしました。私の質問への回答をしたいのなら、私はあなたに信用を与えるでしょう。 –

答えて

1

Vladの解答(コメント内)は正しい。

関連する問題