35

純粋なMVVMを実行している場合、コードビハインドに戻らずにComboBox SelectionChangedイベントをどのように処理しますか?

たとえば、 AttachedBehaviorsを試しましたが、Event = "SelectedChanged"はサポートされていません:

<ComboBox>
    <ComboBoxItem Content="Test1">
        <c:CommandBehaviorCollection.Behaviors>
            <c:BehaviorBinding Event="SelectionChanged" 
                               Command="{Binding SelectedChanged}"
                               CommandParameter="MainBorder123"/>
        </c:CommandBehaviorCollection.Behaviors>
    </ComboBoxItem>
    <ComboBoxItem Content="Test2"/>
    <ComboBoxItem Content="Test3"/>
</ComboBox>
4

3 に答える 3

80

この投稿はかなり古いですが、同じ問題が発生したためです。これが私がそれを解決した方法です(フレームワーク4.0を使用):アイデアはSystem.Windows.Interactivityを使用することです。

XAML で:

<ComboBox ItemsSource="{Binding Items}">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
            <i:InvokeCommandAction Command="{Binding SelectionChangedCommand}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</ComboBox>

次に、ビューモデルに SelectionChangedCommand を実装するだけです。

于 2011-04-28T21:20:09.783 に答える
26

あなたが何を求めているのかはわかりませんが、私が行う方法は、SelectedItemをビューモデルのプロパティにバインドすることです。次に、プロパティセッター内で、実行したいカスタムコードを呼び出します。つまり、ルールに基づいて他のプロパティを設定します。選択したアイテムをオブジェクトにバインドする必要がある場合(他のバインドされたコントロールを更新するため)、これもセッターで設定し、通知を送信します。

于 2009-09-09T15:42:25.397 に答える
3

データ トリガーを使用して、「有効化/無効化、または表示/非表示」などの別の UI 要素でイベントをトリガーします。

選択した要素が他の UI 要素のオブジェクト データを表示するようにするには、データ バインディングを使用し、UI データ表示要素のデータ コンテキストをコンボ ボックスで現在選択されている項目にバインドするように設定します。

于 2009-06-04T13:40:00.083 に答える