Реализация обработчиков событий в ViewModel с помощью MVVM WPF

У меня есть ComboBox:

<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}"/>

Я пытаюсь переместить обработчик событий LostFocus в ViewModel, потому что я выполняю некоторую обработку ошибок в установщике для привязки SelectedValue «ConnectionString», найденной в ViewModel. Я хочу, чтобы это произошло, если пользователь повторно выбирает тот же ComboBoxItem, который запускает OnPropertyChanged, если не выбран другой элемент списка.

Вышеуказанная привязка приводит к ошибке

«Привязка» не может быть установлена ​​для свойства «AddLostFocusHandler» типа «ComboBox». «Привязка» может быть установлена ​​только для свойства DependencyProperty объекта DependencyObject.

Как я могу запустить повторяющийся код в ViewModel при выборе любого элемента в ComboBox, независимо от выбора пользователя?


person sammarcow    schedule 31.01.2013    source источник


Ответы (2)


Вам нужно будет включить ссылку на dll System.Windows.Interactivity, но она будет выглядеть примерно так:

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>
person Josh    schedule 31.01.2013

Ответ Джоша работал у меня с другим пространством имен:

xmlns:b="http://schemas.microsoft.com/expression/2010/interactivity"  
<ComboBox>
<b:Interaction.Triggers>
    <b:EventTrigger EventName="LostFocus">
    <b:InvokeCommandAction  Command="{Binding cbConnection_LostFocus}" CommandParameter="{Binding}"/>
     </b:EventTrigger>
 </b:Interaction.Triggers>
</ComboBox>
person Matthias    schedule 19.12.2013