我有一个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也不会显示数据。
答案 0 :(得分:0)
DataGrid的itemsource应绑定到 ICollectionView 和 not CollectionViewSource 强>
创建一个将从ICollectionView
对象
CollectionViewSource
的属性
public ICollectionView CV
{
get
{
return m_cvs.View;
}
}
在XAML中更新绑定 -
<DataGrid ItemsSource="{Binding CV}"/>