在我的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未调用。为什么呢?
答案 0 :(得分:9)
因为您没有更改Classes
属性 - 您正在更改Classes
引用的对象的内部状态。如果您需要收到有关列表更改的通知,您可能需要查看ObservableCollection
:
答案 1 :(得分:2)
这是因为Classes.Add
没有设置Classes属性,它只是调用Get
然后对返回的对象执行方法。您可以通过执行Add()然后重新设置属性(Classes = Classes
)来强制执行setter,但这有点作弊。你最好的选择是使用像graham所说的ObservableCollection,或者派生你自己的列表类来覆盖Add
方法以引发事件。