通知不适用于ObservableCollection

时间:2012-09-26 16:20:26

标签: wpf data-binding observablecollection

我有一个具有ObservableCollection的两个属性的类:

Public ObservableCollection<User> Users
     { get {return this._users;}}

Public ObservableCollection<User> Admins
     { get {return new ObservableCollection<User>(Users.Where(u => u.type == 1));}}

问题是当我更改用户时,属性用户会收到通知,而不是管理员。 有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果您绑定到视图中的管理员,它将获得一个新的用户Obs​​ervableCollection的副本。

如果您在viewmodel中对Admins.Add(new User())进行编码,它将在与绑定的实例不同的实例上运行。

您应该更改代码,以便它使用单个实例(而不是每次都重新创建)。

编辑(已添加示例):

    private ObservableCollection<User> _admins = new ObservableCollection<User>();
    public ObservableCollection<User> Admins
    {
         get
         {
             _admins.Clear();
             Users.ForEach(p => { if (p.type == 1) { _admins.Add(p); } });
             return _admins;
         }
    }

请注意,ObservableCollection的实例不会更改(这是解决方案的关键)。我只需清除它并将用户重新加载到集合中。