2

私はコンボボックスを持っています:

<ComboBox x:Name="cbConnection"
                      ItemsSource="{Binding Source={StaticResource XmlConnectionList}, XPath=//ComboItem}"
                      DisplayMemberPath="Key"
                      SelectedValuePath="Value"
                      SelectedValue="{Binding Path=ConnectionString,ValidatesOnDataErrors=True,UpdateSourceTrigger=PropertyChanged}" 
                      Margin="{StaticResource ConsistentMargins}"
                      Validation.ErrorTemplate="{StaticResource TextBoxErrorTemplate}" Width="120"
                      LostFocus="{Binding Path=cbConnection_LostFocus}"/>

ViewModelにあるSelectedValueバインディング「ConnectionString」のセッター内でエラー処理を行うため、LostFocusイベントハンドラーをViewModelに移動しようとしています。ユーザーが同じ ComboBoxItem を再選択した場合に、別のリスト項目が選択されていない限り、OnPropertyChanged が発生するようにしたいと考えています。

上記のバインディングはエラーになります

タイプ 'ComboBox' の 'AddLostFocusHandler' プロパティに 'Binding' を設定できません。「Binding」は、DependencyObject の DependencyProperty でのみ設定できます。

ユーザーの選択に関係なく、ComboBox 内のアイテムの選択時に ViewModel 内で反復可能なコードを起動するにはどうすればよいですか?

4

2 に答える 2

3

System.Windows.Interactivity dll への参照を含める必要がありますが、次のようになります。

xmlns:b="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"  
<ComboBox>
<b:Interaction.Triggers>
    <b:EventTrigger EventName="LostFocus">
    <b:InvokeCommandAction  Command="{Binding cbConnection_LostFocus}" CommandParameter="{Binding}"/>
     </b:EventTrigger>
 </b:Interaction.Triggers>
</ComboBox>
于 2013-01-31T20:15:05.977 に答える