WPF, MVVM, ListView中的eventbehavifactory,将事件绑定到命令

本文关键字:事件 绑定 命令 eventbehavifactory MVVM ListView 中的 WPF | 更新日期: 2023-09-27 18:12:38

我基本上试图遵循http://blog.functionalfun.net/2008/09/hooking-up-commands-to-events-in-wpf.html策略,将事件绑定到命令。

我有一个ListView,我想在双击一行上启动iccommand的实例。它上面的ListView或ListBoxItem没有Command属性。这个问题(所以似乎)是通过使用附加属性解决的,但我个人仍然无法弄清楚如何在ListView上使用它。

我有一个"信号"的集合,每个都有一个属性"Name"。下面是我的xaml的一部分。

            <ListView ItemsSource="{Binding Signals}" >
                <ListBox.ItemContainerStyle>
                    <Style TargetType="{x:Type ListBoxItem}">
                        <Setter Property="{models:ListBoxItemBehaviour.DoubleClickCommand}" Value="{Binding Command1}" />
                    </Style>
                </ListBox.ItemContainerStyle>
                <ListView.View>
                   <GridView>
                      <GridViewColumn Header="Signal" DisplayMemberBinding="{Binding Name}" />
                   </GridView>
               </ListView.View>
           </ListView>

这不起作用。ListBoxItemBehaviour是一个行为的实现,按照上面的链接,与ListBoxItem挂钩。MouseDoubleClickEvent事件。

我怀疑上面的错误很小,但对我来说并不明显。有什么建议吗?

第一个错误是:"不支持嵌套类型:"..

WPF, MVVM, ListView中的eventbehavifactory,将事件绑定到命令

ListView中,您可以使用InputBindings来获取鼠标和键盘输入。

要将鼠标双击绑定到命令,可以使用

<ListView.InputBindings>
   <MouseBinding MouseAction="LeftDoubleClick" Command="{Binding ListViewDoubleClickCommand}"/>
</ListView.InputBindings>

好吧,因为我没能找到一个合适的解决方案,但工作就是工作,我牺牲了MVVM模式的纯度而不是可操作性。

将此事件添加到xaml

<EventSetter Event="MouseDoubleClick" Handler="HandleDoubleClick" /> 

和处理程序到

后面的代码
    protected void HandleDoubleClick(object sender, MouseButtonEventArgs e)
    {
        MyViewModel mvm = this.DataContext as MyViewModel;
        mvm.MyCommand.Execute();
    }
因此,双击视图列表中的item将触发该命令。不漂亮,但有用。如果我找到合适的纯MVVM解决方案,我会发布它。