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)setter 时没有调用。为什么?

4

2 回答 2

9

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

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

于 2013-05-23T13:05:49.920 回答
2

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

于 2013-05-23T13:13:53.607 回答