将NotifyPropertyChange与ReadOnly集合一起使用

时间:2013-09-09 09:33:39

标签: wpf binding inotifypropertychanged

我有一个treeView控件,其ItemSource绑定到一个字符串集合。如果我像这样添加项目

private void AddItems()
{
    _myList.Add("string1");
    _myList.Add("string2");
    _myList.Add("string3");
    NotifyOfPropertyChanged(() => MyList);
}

我的字符串集合定义如下

private Collection<string> _myList;
public Collection<string> MyList 
{ 
    get 
    { 
        return _myList;
    }
}

然后在treeView控件上没有任何更新。但是,如果我像这样定义集合

 private Collection<string> _myList;
    public Collection<string> MyList 
    { 
        get 
        { 
            _myList = new Collection<string>();
            _myList.Add("string1");
            _myList.Add("string2");
            _myList.Add("string3");
            return _myList;
        }
        set { _myList = value; NotifyOfPropertyChange(() => MyList); }
    }

并像这样设置集合

 private void AddItems()
    {
        Collection<string> tempList = new Collection<string>();
        tempList.Add("string1");
        tempList.Add("string2");
        tempList.Add("string3");
        MyList = tempList;
    }

然后树控件会显示项目。

2 个答案:

答案 0 :(得分:1)

最有可能的原因是该列表仍然是相同的参考。你真正想要的是ObservableCollection<T>

答案 1 :(得分:1)

AddItems的初始代码永远不会更改属性MyList的值,该属性是对列表对象的引用,它只是在内部更改引用的实例。

如果您想更改集合,请使用INotifyCollectionChanged界面。