ComboBox過濾

在View中完成數據篩選,無需改變數據源的內容,這樣就沒必要擔憂在其它地方也使用這個數據源。git

從路由事件 TextBoxBase.TextChanged 中獲取輸入的文本,並設置視圖的過濾器就能夠了。github

CollectionViewSource.GetDefaultView 方法是返回一個 ICollectionView 對象,它是給定源集合的默認視圖,而後設置視圖的Filter屬性。spa

官方文檔:如何:篩選視圖中的數據code

完整示例在個人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運行效果圖blog

相關文章
相關標籤/搜索