0

こんにちは、タイプ CMessage のオブジェクトのリストがあります。CMessage は次のようになります。

public ROWGUID {get;set;}
public ObservableCollection<CAnswer> Answers 
{
get {return  _Answer;}
set 
{_Answer=value
RaisePropertyChanged("Answer");
}

}

各プロパティには、 INotifyPropertyChanged インターフェイスの実装である RaiseNotifyPropertyChanged メソッドがあります。ポイントは:

  1. ObservableCollection メッセージのリストからいくつかのメッセージを選択します。
  2. 選択したメッセージにいくつかの回答を追加します

そのメッセージに対して実行された RaisePropertyChanged がないのはなぜですか? そうすべき!

4

1 に答える 1

2

あなたはこれをやっています:

// get some Message from OC<Message> collection Message
var message = Messages.First(); 
message.Answers.Add(new CAnswer { Text = "HURRDURR" }); // add an answer

ただし、これを行うと、 CMessage は RaisePropertyChanged のみを呼び出します

var message = Messages.First();
var answers = new ObservableCollection<CAnswer>();
answers.Add(new CAnswer { Text = "LOL" });
message.Answers = answers; // triggers here

1 つ目は、Answers コレクションの CollectionChanged イベントを発生させます。2 つ目は Answers コレクションを変更してsetメソッドを起動し、CMessage クラスの PropertyChanged イベントを発生させます。

ところで、あなたはこれを間違っています。コレクションのプロパティを他の人に設定させてはいけません。これはベスト プラクティスではなく、プロパティを null に設定できるようにする (これは悪いことです) などです。読み取り専用のプロパティ コレクションのみを使用する必要があります。ユーザーがプロパティの変更に関心がある場合は、プロパティの CollectionChanged イベントにサブスクライブする必要があります。

于 2010-02-05T14:57:04.793 に答える