2010-12-14 11 views
0

は、これは私のViewModelある -結合WPF、およびDataContextの

public class ViewModel 
{ 
    public ObservableCollection<Person> Persons { get; set; } 
} 

、これはクラスの人です。今

public class Person : INotifyPropertyChanged 
{ 
    private string _firstName; 
    public string FirstName 
    { 
     get { return _firstName; } 
     set 
     { 
      _firstName = value; 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs("FirstName")); 
      } 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

、人物の姓の一つは、私はいくつかのタスクを実行したい変更されるたびに、 メッセージボックスを発生させることができます。

どうすればよいですか?

答えて

1

あなたは通常、あなたの人のクラスが姓を変更するたびにPropertyChangedイベントを発射、INotifyPropertyChangedのインターフェイスを使用しますINotifyPropertyChanged

public class Person : INotifyPropertyChanged 
{ 
    private string firstName; 
    public string FirstName 
    { 
     get { return this.firstName;} 
     set 
     { 
      this.firstName = value; 
      this.RaisePropertyChanged("FirstName"); 
      MessageBox.Show("Hello World"); 
     } 
    } 
} 

public event PropertyChangedEventHandler PropertyChanged; 

protected void RaisePropertyChanged(string propertyName) 
{ 
    PropertyChangedEventHandler propertyChanged = this.PropertyChanged; 
    if ((propertyChanged != null)) 
    { 
     propertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 
+1

MessageBoxを表示する方法は、Binding/DataContextまたはINotifyPropertyChangedとは関係ありません。私の推測では、OPはMessageBox.Show()のプロパティのセッター内でより多くを探していた –

+0

@アーロン - ああ本当にアーロン、まあ私はあなたが解釈する方法を見ていない "今、人のFirstNameが変更されています。私はいくつかのタスクを実行したい、メッセージボックスを発生させることを許可します。あなたが大きなアイデアを持っているなら、あなたの意見の代わりに答えを投稿してみてはいかがですか? – Gabe

+0

質問が明確でない場合は、OPに詳細を問い合わせてください。私は単にそれを指摘していたので、おそらくあなたはそれらの要素を考慮に入れて追加のルートを提供することができます。 –

1

を実装する必要があります。これにより、ビューのアイテムをPersonクラスにバインドすることができ、データが変更されたときにビューが更新されます。

ただし、FirstNameのときにメッセージボックスを表示するには、ビューにコードが必要です。これを行う1つの方法は、以前と同じように、INotifyPropertyを変更して、ビュー内のすべてのPersonオブジェクトに対してそれをサブスクライブすることです。FirstNameを変更するイベントが呼び出されるたびにMessageBox.Showを使用します。 ObservableCollection内のCollectionChangedイベントを使用して、Personオブジェクトをリスト内外に追跡し、それらがすべてPerson FirstName changedイベントハンドラに接続されていることを確認できます。

私の意見では、PersonクラスではなくPersonオブジェクトを引数として変更するたびに発生するPersonクラスではなく、ViewModelでイベントを発生させることをお勧めします。これは、ViewModelがPerson.FirstNameを変更できる唯一のものであり、Viewを適切な方法でViewModelにバインドしてこれを有効にする必要がある場合にのみ機能します。

関連する問題