1

ウィンドウに多くのリストベースのコントロールを持つ WPF アプリがあり、それらはすべて異なる CollectionViews にバインドされています。

ウィンドウ レベルで、現在フォーカスされているリスト ベースのコントロールで現在選択されている項目を取得する方法はありますか? フォーカスのある要素を探すことで、かなり簡単なコードでこれを実行できることはわかっていますが、WPF はこれをすぐに使用できる概念としてサポートしていますか?

Window.CurrentSelectedDataItem のようなものは素晴らしいでしょう。現在選択されているデータ項目に基づいてコマンドを無効にするためのコマンド管理を一元化する方法として、これを使用することを検討しています。

4

2 に答える 2

1

あなたが指定したようなプロパティがあるとは思いませんが、代わりに ListBox.SelectionChanged イベントの ClassHandler を Window クラスに登録できます。

EventManager.RegisterClassHandler(typeof(ListBox), ListBox.SelectionChanged,
    new SelectionChangedEventHandler(this.OnListBoxSelectionChanged));

これは、アプリケーション内のいずれかの ListBox で選択が変更されるたびに呼び出されます。sender 引数を使用して、選択を変更した ListBox を特定し、必要なときにこの値をキャッシュすることができます。

于 2008-09-18T18:02:02.837 に答える
0

私はこれを試していませんが、コンバーターで MultiBinding を使用して正しいアイテムに到達することを試すことができます。

<MultiBinding Converter="{StaticResource coalesce}">
    <MultiBinding.Bindings>
        <MultiBinding Converter="{StaticResource nullIfFalse}">
            <MultiBinding.Bindings>
                 <Binding ElementName="List1" Path="HasFocus" />
                 <Binding ElementName="List1" Path="SelectedItem" />

nullIfFalse最初のパラメーターが true の場合は 2 番目のパラメーターを返し、それ以外の場合は null を返します。coalescenull 以外の最初の要素を返します。

于 2008-09-30T16:13:51.120 に答える