2013-05-31 51 views
0

列表項我當前必然要在我看來,一個列表框的ObservableCollection<MyObject>MyObject有一個枚舉屬性,我們會打開和關閉(以及其他屬性)。使用綁定,有沒有辦法過濾集合並只顯示打開或關閉的項目?只綁定有特定屬性的

回答

2

你應該看看CollectionViewSource和過濾功能。

如果你想要做純MVVM過濾,你可以有你的ViewModel揭露ICollectionView類型的屬性,將您想要的任何過濾器,然後綁定到從XAML該屬性。

視圖模型:

public ICollectionView MyCollectionView { get; set; } 

public ViewModel() 
{ 
    var items = new List<string> 
    { 
     "Apple", 
     "Orange" 
    }; 

    MyCollectionView = CollectionViewSource.GetDefaultView(items); 

    // Will only display items starting with "A". 
    MyCollectionView.Filter = item => ((string)item).StartsWith("A"); 
} 

XAML:

<ListBox ItemsSource="{Binding MyCollectionView}"/> 
+0

是否可以在純XAML中過濾「CollectionViewSource」或者是否需要隱藏代碼? –

+0

您可以通過在視圖模型中進行過濾來過濾純MVVM中的集合而不存在隱藏代碼。看到我更新的答案。 –

+0

這工作。我將不得不圍繞它來修復一些與我的代碼相關的問題,但這肯定會讓我走上正軌。謝謝! –

2

你可能要考慮一個collection view,或執行視圖模型中篩選自己。

+0

是否可以過濾'CollectionViewSource'純XAML或者你需要的代碼隱藏? –

+0

@DennisE:有時它是不容易,但任何你可以在XAML做可以做的代碼隱藏,反之亦然。 –

+0

@DennisE:一個簡單的搜索返回這個...... http://stackoverflow.com/questions/6461826/in-wpf-can-you-filter-a-collectionviewsource-without-code-behind –