我基本上试图遵循http://blog.functionalfun.net/2008/09/hooking-up-commands-to-events-in-wpf.html策略,将事件绑定到命令。
我有一个ListView,我想在双击一行时启动一个ICommand实例。它上面的ListView或ListBoxItem没有Command属性。这个问题(看起来似乎)是通过使用附加属性解决的,但我个人仍然无法弄清楚如何在ListView上使用它。
我有一组“信号”,每个都有一个属性“名称”。 下面是我的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事件上。
我怀疑上面的错误很小,但对我来说并不明显。有什么建议吗?
第一个错误是:“不支持嵌套类型:”..
答案 0 :(得分:1)
在ListView
中,您可以使用InputBindings获取鼠标和键盘输入。
要将MouseDoubleClick绑定到命令,您可以使用
<ListView.InputBindings>
<MouseBinding MouseAction="LeftDoubleClick" Command="{Binding ListViewDoubleClickCommand}"/>
</ListView.InputBindings>
答案 1 :(得分:0)
将此事件添加到xaml
<EventSetter Event="MouseDoubleClick" Handler="HandleDoubleClick" />
和后面的代码处理程序
protected void HandleDoubleClick(object sender, MouseButtonEventArgs e)
{
MyViewModel mvm = this.DataContext as MyViewModel;
mvm.MyCommand.Execute();
}
因此,双击视图列表中的项目将触发该命令。不漂亮,但有效。如果我找到合适的纯MVVM解决方案,我会发布它。