如何在 ItemContainerStyle 中使用 EventToCommand?
<ListBox Grid.Row="1" ItemsSource="{Binding Source}" SelectedItem="{Binding SelectedItem,Mode=TwoWay}" DisplayMemberPath="Name">
<ListBox.ItemContainerStyle>
<Style>
<EventSetter Event="ListBoxItem.MouseDoubleClick" Handler="DoubleClick" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
现在就是这样。 如果我想将每个ListBoxItem的DoubleClick事件绑定到RelayCommand,该怎么办?
<ListBox Grid.Row="1" ItemsSource="{Binding Source}" SelectedItem="{Binding SelectedItem,Mode=TwoWay}" DisplayMemberPath="Name">
<ListBox.ItemContainerStyle>
<Style>
<EventSetter Event="ListBoxItem.MouseDoubleClick" Handler="DoubleClick" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
This is how it works now.
What should I do if I want to Bind every ListBoxItem's DoubleClick event to a RelayCommand?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这就是我使用 MVVMLight EventToCommand 功能的方式。
如果你有一个双击事件挂钩。如果该选项不可用,请按下(预览)鼠标并检查命令参数中的 clickCount。 ClickCount 2 对应于双击。
请注意:我有自己的 RelayCommand 实现。 MVMMLight 工具包中的工具可能看起来有所不同。
XAML:
ViewModel:
This is the way I am using the MVVMLight EventToCommand feature.
If you have a doubleclick event hook to that. If that is not available take the (preview)mousedown and check the clickCount in the command args. A ClickCount of 2 corresponds to a double click.
Please note: I have my own RelayCommand Implementation. The one from the MVMMLight toolkit might look different.
XAML:
ViewModel:
执行此操作的最佳方法是仅使用以隐藏代码编写的普通事件处理程序。如果需要,这可以中继到模型或视图模型上的方法或命令。
像使用 EventToCommand 行为这样的技巧只会让您付出更复杂的 XAML 代价,并且内存泄漏的风险相当高。 (发生这种情况是因为 EventToCommand 监听了 CanExecuteChanged 事件,即使它不应该监听。)
The best way to do this is to just use a normal event handler written in code-behind. If needed this can relay to a method or command on your model or view-model.
Tricks like using an EventToCommand behavior just cost you in terms of more complex XAML and a pretty high risk that you will leak memory. (This happens because EventToCommand listens to the CanExecuteChanged event even when it shouldn't.)