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。

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

  1. 像@General-Doomer 所说的那样使用 ObservableCollection 而不是 List
  2. SeriesSearchList.Clear(); OnPropertyChanged("SeriesSearchList");