2012-07-27 95 views
3

我有一个使用Caliburn.Micro的WPF应用程序。 DataGrid绑定到ViewModel中的对象集合。你可以请建议一种方法来过滤DataGrid的内容,如果可能的话,任何领域?WPF DataGrid过滤Caliburn.Micro

谢谢。

+0

你是绑定到集合(List,ObservableCollection)还是CollectionView? http://msdn.microsoft.com/en-us/library/system.windows.data.collectionview.aspx – ShadeOfGrey 2012-07-27 12:02:03

+0

它是BindableCollection。 – 2012-07-27 12:04:08

回答

6

在视图模型创建一个新的属性:

private ICollectionView fooView; 

public ICollectionView FooView 
{ 
    get 
    { 
     return this.fooView; 
    } 

    set 
    { 
     this.fooView = value; 

     NotifyPropertyChanged("FooView"); 
    } 
} 

然后你填充绑定采集后:

// Populate collection 
BindableCollection collectionName = this.PopulateCollection(); 

FooView = CollectionViewSource.GetDefaultView(collectionName); 

您认为更改绑定从collectionNameFooView

CollectionView类提供了对数据进行排序/过滤/分组的方法。在你的情况下How to: Filter Data in a View。过滤器代码将根据您的型号和要求而有所不同。

+0

非常感谢。虽然我有这个问题。据我所知,这种方法让我可以像“仅显示未填写的订单”或“显示所有订单”等那样进行过滤,但我需要让用户选择例如客户想要按客户过滤时,显示客户选择的所有记录。我们不能像所提供的例子那样使用逻辑(例如return(order.Filled ==“No”);),因为Customer不是固定的值列表,如“Yes”或“No”。 – 2012-07-27 12:48:10

+0

您可以创建多个过滤器事件处理程序(针对您要应用过滤器的任何字段)。因此,当用户选择Customer类型的值时,应用Customer类型的字段的处理程序(例如,'+ = new FilterEventHandler(ShowRecordsByCustomer);')。如果他选择了Orders类型的值,请为该类型的字段应用过滤器。 – ShadeOfGrey 2012-07-27 13:00:27

+0

我明白了,谢谢! – 2012-07-27 13:02:23