2012-07-27 94 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