【问题标题】:WPF datagrid filter data binding List<T1> within a List<T> C#WPF 数据网格过滤器数据绑定 List<T1> 在 List<T> C#
【发布时间】:2018-09-16 18:57:49
【问题描述】:

我有一个DataGrid 绑定到一个List&lt;T&gt;。下面是我的课。 List&lt;FSCLevel&gt; 绑定到我的主要DataGrid 中的RowDetails。我添加了一个过滤器控件,供用户通过CUSTOMER_CODE进行过滤。

public class CUSTCARDLevel: INotifyPropertyChanged
{
    #region Members        
    private string _cUSTOMER_CODE;            
    private List<FSCLevel> _fSClist;        
    #endregion

    #region Properties       
    public string CUSTOMER_CODE { get { return _cUSTOMER_CODE; } set { _cUSTOMER_CODE = value; OnPropertyChanged("CUSTOMER_CODE"); } }      
    public List<FSCLevel> FSCLIST   { get { return _fSClist; } set {_fSClist = value;    OnPropertyChanged("FSCLIST"); } }
    #endregion

    // INotifyPropertyChanged interface
    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string propertyName) 
   {
        if (PropertyChanged != null)
        { PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

}

我现在需要在列表中应用一些过滤器,例如在DataGrid 上,它只显示CUSTOMER_CODE 是“CUST1”。

所以问题来了,我必须使用ObservableCollection 来进行过滤吗?有没有办法可以只使用带有INotifyPropertyChanged 接口的类?如果是这样,在List&lt;T&gt; 中处理List&lt;T1&gt; 的最佳方法是什么?假设我将我的列表投射到 ObservableCollection&lt;T&gt; 使用:

ObservableCollection<CUSTCARDLevel> myObserveList = new ObservableCollection<CUSTCARDLevel>(myList);

内部的List&lt;FSCLevel&gt; 会发生什么?或者我如何将 CUSTCARDLevel 中的List&lt;FSCLevel&gt; 转换为 ObservableCollection?或者我需要做点什么来修复我的课程?

【问题讨论】:

标签: c# wpf filter binding datagrid


【解决方案1】:

我想将此作为评论,但它超出了字符数限制。我会马上处理的。

嗯,这都是关于时间的需要。

我强烈建议不要使用new ObservableCollection&lt;object&gt;(myList) 频繁转换,因为它每次都会返回一个占用memory 的新实例。

现在假设您有一个List&lt;T&gt;,并且您想在 UI 上反映 List&lt;T&gt; 的项目的任何更改,那么您应该只对 List&lt;T&gt; 使用 ObservableCollection,而不是任何 @987654328 @ 是Class T 的一部分。

相反,如果您的 UI 需要在每次修改 class T 中的 collection 时进行更新,我建议您将其设为 ObservableCollection

通常以最常见的方式,开发人员使用ExtensionMethodsList&lt;T&gt; 转换为ObservableCollection&lt;T&gt; 了解更多信息here

此外,他们使用XAML Converters 并将元素直接绑定到列表。

我的最终建议:如上所述,根据您的需要使用可观察的集合,但最重要的是,除非确实有必要,否则不要对 Lists 进行操作。从您的服务中获取dataList 将其转换为ObservableCollection,然后使用System.LINQ 从中过滤数据。

【讨论】:

  • 感谢您的回复。假设我在数据准备期间创建了一个 ObservableCollection,我的班级内的“List”会发生什么?因为我无法将 ObservableCollection 添加到我的项目中(我只能在数据准备期间放入 List .....谢谢
  • 是的,所以List&lt;FSCLevel&gt; 仍然是一个列表。只有保存数据的主列表是ObservableCollection,这意味着List&lt;FSCLevel&gt; 中值的任何更改都不会自动反映在 UI 上。如果您确实想将控件绑定到 observableCollection,可以使用数据绑定和IValueConverter 将任何绑定列表转换为 observableCollection
猜你喜欢
  • 2011-10-26
  • 1970-01-01
  • 2011-03-29
  • 1970-01-01
  • 2011-03-16
  • 2017-02-27
  • 1970-01-01
  • 1970-01-01
  • 2011-06-28
相关资源
最近更新 更多