List.Clear() 不适用于双向绑定 C#
List.Clear() not working with Two way binding C#
我在 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()
使用双向绑定。
正如 General-Doomer 所指出的,您需要使用 ObservableCollection 而不是标准的 List
之所以这样,是因为ObservableCollection在底层列表的内容每次发生变化时都会发布一个事件。并且 WPF 框架挂钩这个,并会在发布时自动更新 UI。
现在 Clear 不起作用但将其设置为 Null 的原因是,当您清除它时,您正在更改 属性 的内容,而将其设置为 null 会更改实际 属性。 UI 绑定到 SeriesList 属性,当此更改(设置为空)时,UI 将更新以反映它。
简而言之,如果您希望所有更改(在集合中。而不是在集合中的对象上)自动获取视图更新,请使用 ObservableCollection。
在第一种情况下,您从列表中删除了所有元素,但没有分配新值(旧参考)
在第二种情况下,您将新值分配给列表,因此调用方法 OnPropertyChanged。
您可以通过两种方式解决这个问题:
- 像@General-Doomer 所说的那样使用 ObservableCollection 而不是 List
-
SeriesSearchList.Clear();
OnPropertyChanged("SeriesSearchList");
我在 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()
使用双向绑定。
正如 General-Doomer 所指出的,您需要使用 ObservableCollection 而不是标准的 List
之所以这样,是因为ObservableCollection在底层列表的内容每次发生变化时都会发布一个事件。并且 WPF 框架挂钩这个,并会在发布时自动更新 UI。
现在 Clear 不起作用但将其设置为 Null 的原因是,当您清除它时,您正在更改 属性 的内容,而将其设置为 null 会更改实际 属性。 UI 绑定到 SeriesList 属性,当此更改(设置为空)时,UI 将更新以反映它。
简而言之,如果您希望所有更改(在集合中。而不是在集合中的对象上)自动获取视图更新,请使用 ObservableCollection。
在第一种情况下,您从列表中删除了所有元素,但没有分配新值(旧参考) 在第二种情况下,您将新值分配给列表,因此调用方法 OnPropertyChanged。
您可以通过两种方式解决这个问题:
- 像@General-Doomer 所说的那样使用 ObservableCollection 而不是 List
- SeriesSearchList.Clear(); OnPropertyChanged("SeriesSearchList");