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

我试图将 LostFocus 事件处理程序移至 ViewModel,因为我在设置器中为 ViewModel 中找到的 SelectedValue 绑定“ConnectionString”做了一些错误处理。如果用户重新选择相同的 ComboBoxItem,我希望发生这种情况,除非选择了不同的列表项,否则它会触发 OnPropertyChanged。

上述绑定导致错误

不能在“ComboBox”类型的“AddLostFocusHandler”属性上设置“绑定”。只能在 DependencyObject 的 DependencyProperty 上设置“绑定”。

无论用户的选择如何,如何在选择组合框中的任何项目时触发 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 回答
0

乔希的回答对我有用,但名称空间不同:

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>
于 2013-12-19T05:11:35.590 回答