从列表中删除不要调用setter?

时间:2013-05-23 13:02:53

标签: c# mvvm

在我的c#app(MVVM Pattern)中我有类似的东西:

 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)时,setter未调用。为什么呢?

2 个答案:

答案 0 :(得分:9)

因为您没有更改Classes属性 - 您正在更改Classes引用的对象的内部状态。如果您需要收到有关列表更改的通知,您可能需要查看ObservableCollection

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

答案 1 :(得分:2)

这是因为Classes.Add没有设置Classes属性,它只是调用Get然后对返回的对象执行方法。您可以通过执行Add()然后重新设置属性(Classes = Classes)来强制执行setter,但这有点作弊。你最好的选择是使用像graham所说的ObservableCollection,或者派生你自己的列表类来覆盖Add方法以引发事件。