MVF中的WPF绑定检查事件

And*_*eaG 4 wpf mvvm

我是MVVM模式的新手,我必须在以下视图中拦截已检查/未检查的操作

SendMessageView.xaml

<ListBox.ItemTemplate>
   <DataTemplate>
      <StackPanel>
         <CheckBox Checked="Specialita_Checked" 
                Unchecked="Specialita_Unchecked"
                Content="{Binding Path=Item.Name}"
                IsChecked="{Binding RelativeSource={RelativeSource FindAncestor,
                            AncestorType={x:Type ListBoxItem}}, 
                            Path=IsSelected,Mode=TwoWay}"/>
      </StackPanel>
   </DataTemplate>
</ListBox.ItemTemplate>
Run Code Online (Sandbox Code Playgroud)

SendMessageView.xaml.cs

private void Specialita_Checked(object sender, System.Windows.RoutedEventArgs e)
{
   var aSendMessageViewModel = (SendMessageViewModel)this.DataContext;
   if (aSendMessageViewModel != null)
   {
      var aCheckBox = (CheckBox)sender;
      aSendMessageViewModel.AddSpecialita(aCheckBox.Content.ToString());
   }
}
Run Code Online (Sandbox Code Playgroud)

aSendMessageViewModel.cs调用的文件是在a内调用SendMessageView.xaml.cs,这是不正确的.帮助我正确使用MVVM模式.

Lou*_*ann 7

在项目中添加System.Windows.Interactivity.dll并在xaml的顶部引用它(xmlns:i ="...")

然后你可以这样做:

<ListBox.ItemTemplate>
   <DataTemplate>
      <StackPanel>
         <CheckBox Content="{Binding Path=Item.Name}"
                IsChecked="{Binding RelativeSource={RelativeSource FindAncestor,
                            AncestorType={x:Type ListBoxItem}}, 
                            Path=IsSelected,Mode=TwoWay}">
             <i:Interaction.Triggers>
                <i:EventTrigger EventName="Checked">
                    <i:InvokeCommandAction Command="{Binding DataContext.OnCheckedCommand, ElementName=myCtrl}" />
                </i:EventTrigger>
             </i:Interaction.Triggers>
         </CheckBox>
      </StackPanel>
   </DataTemplate>
</ListBox.ItemTemplate>
Run Code Online (Sandbox Code Playgroud)

并在ViewModel中使用名为OnCheckedCommand的命令来处理它.