我在WPF
MVVM
应用程序中工作,我有一个场景,我需要清除一个绑定为radGrid
的两个方式的列表(即)必须在点击按钮时显示网格为空。
我尝试过使用,
SeriesSearchList.Clear();
//不起作用。
SeriesSearchList = null;
//工作。
我已经用这种方式宣布了,
private List<SeriesSearchBO> m_lSearchList;
public List<string> SeriesSearchList
{
get { return this.m_lSearchList; }
set
{
if (this.m_lSearchList!= value)
{
this.m_lSearchList= value;
OnPropertyChanged();
}
}
}
好奇为什么我无法让List.Clear()
使用双向绑定。
答案 0 :(得分:2)
在第一种情况下,您从列表中删除所有元素,但不分配新值(旧引用) 在第二种情况下,您将新值分配给list,因此调用方法OnPropertyChanged。
您可以通过两种方式解决此问题:
答案 1 :(得分:-1)
正如General-Doomer指出的那样,你需要使用ObservableCollection而不是标准List
这是因为ObservableCollection每次基础列表的内容发生更改时都会发布一个事件。并且WPF框架与此挂钩,并且会在发布时自动更新UI。
现在Clear不起作用但将其设置为Null DOES的原因是因为当你清除它时,你正在改变属性的CONTENT,而将它设置为null会改变ACTUAL属性。 UI绑定到SeriesList属性,当更改(设置为null)时,UI将更新以反映它。
简而言之,如果您希望进行所有更改(在集合中,而不是集合中的对象),请使用ObservableCollection自动获取视图的更新。