1

のプロパティにListBox応じてフィルターを適用したいと思います。IsSelectedCheckBox

現時点で私はこのようなものを持っています。
XAML

<CheckBox Name="_filterCheckBox" Content="Filter list" Checked="ApplyFilterHandler"/>
<ListBox ItemsSource="{Binding SomeItems}" />

CodeBehind

    public ObservableCollection<string> SomeItems { get; private set; }

    private void ApplyFilterHandler(object sender, RoutedEventArgs e)
    {
        if (_filterCheckBox.IsChecked.Value)
            CollectionViewSource.GetDefaultView(SomeItems).Filter += MyFilter;
        else
            CollectionViewSource.GetDefaultView(SomeItems).Filter -= MyFilter;
    }

    private bool MyFilter(object obj)
    {
        return ...
    }

それは機能しますが、このソリューションは昔ながらの方法(Windowsフォーム)のように感じます。

質問:
Bindings / in XAMLでこれを実現することは可能ですか?

御時間ありがとうございます。

4

1 に答える 1

0

私が考えることができる唯一の方法は、XAMLでObjectDataProviderと2つの別々のオブジェクトを作成することです。CollectionViewSource一方のビューにはフィルターが適用され、もう一方のビューには適用されません。次に、CheckBox.IsCheckedプロパティに直接バインドして、カスタムを使用できますIValueConverter。値コンバーターには、2つの依存関係プロパティがあります。どちらもタイプです。CollectionViewSource.これらのプロパティは、「UnfilteredItems」および「FilteredItems 」と呼ばれる場合があります。XAMLではCollectionViewSource、フィルター処理されていないアイテムのプロパティをフィルター処理されていないプロパティに設定し、フィルター処理されたアイテムのプロパティをフィルターを使用したプロパティに設定します。コンバータロジック自体は単純です。trueの場合CollectionViewSourceはフィルタリングされたものを返し、falseの場合はフィルタリングされていないものを返します。

このソリューションは非常に洗練されたものではありませんが、仕事を成し遂げることができます。Filterはではなく、イベントハンドラーによってのみ指定できるためDependencyProperty、私たちの手はこれに結びついています。しかし、あなたの解決策は悪いものではないと思います。

于 2010-04-22T18:43:20.343 に答える