XAML 如何将列表视图绑定到触发Icommand的双击事件?

mqxuamgl  于 2023-05-11  发布在  其他
关注(0)|答案(1)|浏览(104)

在WPF中,我的ListView有ListView.InputBindings,我想在其中添加一个MouseBinding,用于触发ICommand的左键双击。
现在我的代码看起来像这样:

<ListView Name="ListViewName" 
          Grid.Row="1" 
          Grid.Column="0"
          ItemsSource="{Binding DefinedItems}"
          ScrollViewer.HorizontalScrollBarVisibility="Auto" 
          ScrollViewer.VerticalScrollBarVisibility="Auto">
  <ListView.InputBindings>
    <KeyBinding Key="Delete" 
                Command="{Binding DeleteSelectedItems}" 
                CommandParameter="{Binding SelectedItems, ElementName=ItemsListView}">
    </KeyBinding>
    <KeyBinding Key="Space" 
                Command="{Binding SwitchItemState}" 
                CommandParameter="{Binding SelectedItems, ElementName=ItemsListView}">
    </KeyBinding>
    <MouseBinding Gesture="LeftDoubleClick" 
                  Command="{Binding GoToItem}" 
                  CommandParameter="{Binding SelectedItems, ElementName=ItemsListView}">
    </MouseBinding>
  </ListView.InputBindings>

我已经在viewModel上设置了命令,但是我不知道鼠标事件C#代码在哪里,或者我是否需要它。提前感谢!

tuwxkamq

tuwxkamq1#

有各种各样的第三方软件包来引入允许事件绑定到命令的事件行为,但它基本上是使用影响驱动程序来挂一个小图片。最后,让您的生活更轻松,只需使用事件处理程序,然后在代码后面执行ICommand。

<ListView Name="ListViewName" 
          Grid.Row="1" 
          Grid.Column="0"
          ItemsSource="{Binding DefinedItems}"
          ScrollViewer.HorizontalScrollBarVisibility="Auto" 
          ScrollViewer.VerticalScrollBarVisibility="Auto"
          MouseDoubleClick="ListViewName_MouseDoubleClick"/>
private void ListViewName_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    var viewModel = (MyViewModel)DataContext;
    if (viewModel.GoToItem.CanExecute(ListViewName.SelectedItem))
        viewModel.GoToItem.Execute(ListViewName.SelectedItem);
}

请记住,MVVM并不意味着“没有代码隐藏”,这是经常建议的,它只是意味着代码隐藏应该是遵循单向关系的可视化逻辑,而这个解决方案就是这样做的。

相关问题