List.Clear()无法使用双向绑定C#

时间:2015-05-08 08:18:34

标签: c# wpf mvvm

我在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()使用双向绑定。

2 个答案:

答案 0 :(得分:2)

在第一种情况下,您从列表中删除所有元素,但不分配新值(旧引用) 在第二种情况下,您将新值分配给list,因此调用方法OnPropertyChanged。

您可以通过两种方式解决此问题:

  1. 使用ObservableCollection代替List,就像所说的@ General-Doomer
  2. 一样
  3. SeriesSearchList.Clear(); OnPropertyChanged( “SeriesSearchList”);

答案 1 :(得分:-1)

正如General-Doomer指出的那样,你需要使用ObservableCollection而不是标准List

这是因为ObservableCollection每次基础列表的内容发生更改时都会发布一个事件。并且WPF框架与此挂钩,并且会在发布时自动更新UI。

现在Clear不起作用但将其设置为Null DOES的原因是因为当你清除它时,你正在改变属性的CONTENT,而将它设置为null会改变ACTUAL属性。 UI绑定到SeriesList属性,当更改(设置为null)时,UI将更新以反映它。

简而言之,如果您希望进行所有更改(在集合中,而不是集合中的对象),请使用ObservableCollection自动获取视图的更新。