4

私のc#アプリ(MVVMパターン)には、次のようなものがあります:

 private List<MyClass> _classes= new List<MyClass>();
 public List<MyClass> Classes
    {
        get { return _classes; }
        set
        {
            _servers = value;
            NotifyOfPropertyChange(() => Classes);
            NotifyOfPropertyChange(() => Classes2);
        }
    }
  public List<MyClass> Classes2
    {
        get
        {
           return Classes.Where(class=> class.boolValue).ToList();
        }
    }

そして、私が使用するClasses.Add(class)か、Classes.Remove(class)セッターが呼び出されないとき。なんで?

4

2 に答える 2

9

プロパティを変更していないため、Classesによって参照されるオブジェクトの内部状態を変更していますClasses。リストの変更について通知を受ける必要がある場合は、以下を調べてObservableCollectionください。

http://msdn.microsoft.com/en-us/library/ms668604.aspx

于 2013-05-23T13:05:49.920 に答える
2

Classes プロパティを設定していないため、返されたオブジェクトに対してメソッドをClasses.Add呼び出して実行しているだけです。GetAdd() を実行してからプロパティ ( ) を再設定することで、セッターを強制的に発生させることができますが、Classes = Classesそれはちょっとしたごまかしです。あなたの最善の策は、グラハムが言うように ObservableCollection を使用するか、Addメソッドをオーバーライドしてイベントを発生させる独自のリスト クラスを派生させることです。

于 2013-05-23T13:13:53.607 に答える