我有一个用户控件,其中包含一些telerik
控件。我编写了一个ViewModel,所有业务逻辑都驻留在其中。
我需要拦截LeftClick
事件,以了解用户何时单击telerik
控件。我尝试使用MouseBinding
技术将LeftClick
绑定到ViewModel中的事件处理程序。
我不确定事件处理程序的签名是什么。我在某个地方读到,绑定的命令应该是ICommand
类型,执行方法只需要一个参数。LeftClick
事件的签名是:
public void SelectItem(object o, EventArgs e)
字符串
如何将额外的参数传递给execute方法?
我写了下面的XAML:
<telerik:RadTransitionControl.InputBindings>
<MouseBinding Gesture="LeftClick" Command="SelectedItem" />
</telerik:RadTransitionControl.InputBindings>
型
如何在ViewModel中定义SelectedItem
?Command="SelectedItem"
能用吗?或者我应该在这里加上一个约束性条款?
3条答案
按热度按时间fcwjkofz1#
首先你需要某种实现System.Windows.Input.ICommand的RelayCommand。这将帮助你绑定。
XAML
字符串
视图模型
型
wj8zmpe12#
问题是MouseBinding的Command属性不是DependencyProperty,因此您无法将某些内容绑定到它。
这里有一个类似的问题:
If we can't bind a MouseBinding's Command, what are we supposed to do?
基本上,根据这个问题的公认答案,你必须使用AttachedCommandBehavior而不是MouseBinding来实现你想要的。在我看来,这将是最好的方式,如果这是你做了很多。
或者,如果这是您的代码中唯一这样做的情况,我认为在代码后面处理事件并从那里调用视图模型的命令不会有什么坏处。MVVM纯粹主义者可能不同意,但有时候最好用简单的方式做事情,而不是把自己绑在结里,试图让代码完全空着!
r7knjye23#
Command值应该是一个绑定,而不仅仅是一个属性名:
字符串
然后你传递给CommandParameter的任何东西都将是传递给Execute的额外参数。