在View中完成數據篩選,無需改變數據源的內容,這樣就不必擔心在其它地方也使用這個數據源。 從路由事件 TextBoxBase.TextChanged 中獲取輸入的文本,並設置視圖的過濾器就可以了。 CollectionViewSource.GetDefaultView 方法是返回一個 IColle ...
在View中完成數據篩選,無需改變數據源的內容,這樣就不必擔心在其它地方也使用這個數據源。
從路由事件 TextBoxBase.TextChanged 中獲取輸入的文本,並設置視圖的過濾器就可以了。
CollectionViewSource.GetDefaultView 方法是返回一個 ICollectionView 對象,它是給定源集合的預設視圖,然後設置視圖的Filter屬性。
官方文檔:如何:篩選視圖中的數據
完整示例在我的Github中
<ComboBox Width="300" HorizontalAlignment="Center" VerticalAlignment="Center" ItemsSource="{Binding DemoCollection, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MainWindow}}}" IsEditable="True" IsTextSearchEnabled="False" TextBoxBase.TextChanged="ComboBox_TextChanged"/>
private void ComboBox_TextChanged(object sender, TextChangedEventArgs e) { if (sender is ComboBox comboBox) { var view = (CollectionView)CollectionViewSource.GetDefaultView(comboBox.ItemsSource); view.Filter = f => f is string s && s.Contains(comboBox.Text); } }
Demo運行效果圖