【问题标题】:WPF DataGrid - one itemssource, multiple views, multiple filtersWPF DataGrid - 一个项目源、多个视图、多个过滤器
【发布时间】:2013-11-04 20:16:26
【问题描述】:

我有一个 ObservableCollection,我想绑定到多个数据网格,每个数据网格都显示在自己的窗口中,每个数据网格都有不同的过滤器。我最初使用的是这个:

ICollectionView m_icvs = CollectionViewSource.GetDefaultView(ListOrder)
m_icvs.Filter = OrderFilter;

对于一个过滤器来说效果很好,但是当我需要打开更多窗口时,每个窗口都有自己的过滤器,过滤器会在所有窗口中发生变化。我认为这是因为所有窗口都使用相同的 ICollectionView,它由 GetDefaultView 返回。所以我发现了另一个有类似问题的帖子 - Multiple Views of Observable Collection with Datagrid。我试图使这个解决方案适应我的问题,但无法让它发挥作用。这是我尝试过的:

private CollectionViewSource m_cvs;
public CollectionViewSource Cvs
{
    get { return m_cvs; }
    set { m_cvs = value; }
}

ObservableCollection<OrderItem> m_listOrder;
public ObservableCollection<OrderItem> ListOrder
{
    get { return m_listOrder; }
    set { m_listOrder = value; }
}

public OrderDlg(ObservableCollection<OrderItem> listOrder)
{
    ListOrder = listOrder;
    ...
    Cvs = new CollectionViewSource();
    Cvs.Source = ListOrder;
    Cvs.View.Filter = delegate(object o) { return OrderFilter(o); };
}

xaml:

<DataGrid
ItemsSource="{Binding Cvs}">
...
</DataGrid>

使用这种方法,DataGrid 不会显示数据,即使我注释掉了应用过滤器的行。

【问题讨论】:

  • 您在第二种方法中面临什么问题?
  • 数据网格中没有任何显示

标签: wpf datagrid filter


【解决方案1】:

DataGrid 的 itemsource 应该绑定到 ICollectionView不 CollectionViewSource

创建一个属性,该属性将从您的 CollectionViewSource 对象返回 ICollectionView -

public ICollectionView CV
{
   get
   {
      return m_cvs.View;
   }
}

在 XAML 中更新您的绑定 -

<DataGrid ItemsSource="{Binding CV}"/>

【讨论】:

    猜你喜欢
    • 2014-03-16
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 2019-05-26
    • 2011-02-16
    • 2014-12-19
    相关资源
    最近更新 更多