用于WPF的Telerik UI免费下载30天试用版

EventToCommandBehavior

当在更高级的开发场景中工作时,我们经常发现自己倾向于使用MVVM模式来生成更简洁、松耦合、更容易测试的代码,但随之而来的是确保我们使用的所有控件都能遵循该模式的责任。虽然使用。net框架中存在的基于事件的模型非常容易,但事件并不能很好地融入减少传统代码隐藏的思维方式,而是在视图模型中处理逻辑。这就是电传erikEventToCommandBehavior允许您的事件触发和您的代码做出相应的响应,所有这些都在ViewModel中,而无需触及UserControls的代码。

开始

假设你需要用aRadListBox事件,以便在那里执行一些自定义逻辑。如果您具备以下条件RadListBox

例1:声明RadListBox控件

哪个DataContext是下面的ViewModel:

示例2:创建ViewModel类

公共类ViewModel: ViewModelBase{公共ObservableCollection ListBoxItems {get;设置;}公共ViewModel(){这个。ListBoxItems = new ObservableCollection {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5"};}}
你需要处理ListBox的MouseEnter事件EventToCommandBehavior将允许您轻松地将该事件绑定到ViewModel中的命令。您只需要添加类型的对象EventBindingEventToCommandBehavior。EventBindings收集。的EventBinding对象包含几个属性,在这种情况下,你需要使用Command属性,它应该绑定到所需的Command和Event属性,代表你想要处理的事件:

示例3:将特定事件绑定到所需命令

   
你应该做的最后一件事是在ViewModel中定义自定义命令,如下所示:

例4:定义自定义命令

公共ICommand CustomCommand{获取;设置;}……公共ViewModel(){…这一点。CustomCommand = new DelegateCommand(OnCustomCommandExecuted);} private void OnCustomCommandExecuted(object obj) {MessageBox。显示(“命令执行!”);}
图1显示最终结果。

图1:通过EventToCommandBehavior执行命令

命令行为的常见事件

RaiseOnHandledEvents

有时,需要处理的事件似乎已经在控件的代码中处理过了。在前面的例子中,事件没有在代码中处理,所以没有任何问题。然而,如果你需要处理MouseLeftButtonDown作为一个例子,你将无法做到,除非你设置RaiseOnHandledEvents属性设置为True,它允许您引发已处理的事件:

示例5:设置RasedOnHandledEvents属性

< telerik: EventToCommandBehavior。EventBindings > 
结果将与单击ListBox时执行的命令相同。

命令参数

绑定到命令时,可能需要将一些数据传递给执行该命令的方法。的EventToCommandBehavior在本例中为您提供了两个选项-传递您需要的任何内容CommandParameter属性传递已处理事件的事件参数PassEventArgsToCommand属性设置为True。

注意,如果同时设置这两个属性,则CommandParameter是否优先级高于PassEventArgsToCommand财产。

CommandParameter

CommandParameter属性,您可以轻松地传递对象或将其绑定到另一个控件的属性。让我们通过包含CommandParameter来升级上面的例子,它将向ViewModel中的方法传递一个简单的字符串:

例6:设置CommandParameter

< telerik: EventToCommandBehavior。EventBindings > 
ViewModel中的方法应该如下所示:

例7:修改ViewModel类中的方法

private void OnCustomCommandExecuted(object obj) {MessageBox.Show(obj. tostring ());}
结果显示在图2

图2:使用命令参数的修改方法

命令行为的常见事件

PassEventArgsToCommand

方法将事件参数传递给方法PassEventArgsToCommand属性为True。这将允许您在同一个示例中获得单击的元素并根据需要使用它。

例8:设置passevenargstocommand属性

< telerik: EventToCommandBehavior。EventBindings > 

示例9:修改方法以使用EventArgs

private void oncustomcommandexperformed (object obj) {var clickedItem = (obj作为MouseButtonEventArgs)。OriginalSource作为TextBlock;if (clickedItem != null) {MessageBox。显示(" click Item: " + clickitem . text);}}
结果显示在图3

图3:将EventArgs传递给方法

命令行为的常见事件

CommandTarget

CommandTarget的性质EventBinding指定命令发生的元素。如果CommandTarget则具有键盘焦点的元素将接收该命令。欲知更多有关CommandTarget请查看CommandTarget属性主题

多个命令

EventToCommandBehavior使您能够添加多个EventBinidings。您可以轻松地将多个命令绑定到单个事件,也可以将单个命令绑定到多个事件。的MouseLeftButtonDown事件时,我们可以在ViewModel中执行两个命令RadListBox触发:

例10:设置多个事件绑定

< telerik: EventToCommandBehavior。EventBindings >  

如果将多个命令附加到单个事件,则这些命令将按照在事件中定义的顺序执行EventBindings收集(从上到下)。

未绑定

在某些情况下,事件可能会在命令的约束力EventBinding是评估。因此,事件将不会被处理。对于这样的场景,有几个解决方案。出于示例的目的,AutoGeneratingColumn事件的RadGridView将被使用。

使用ElementName作为命令绑定

例11:为命令设置ElementName绑定

设置XAML中窗口的DataContext

例12:在XAML中设置窗口的DataContext

<窗口。DataContext>  

以编程方式添加EventBinding

例13:以编程方式添加EventBinding

公共MainWindow() {InitializeComponent();这一点。DataContext = new MainWindowViewModel();EventToCommandBehavior.GetEventBindings(显示数据表格)。添加(新Telerik.Windows.Controls.EventBinding () {EventName =“AutoGeneratingColumn”,命令=(显示数据表格。DataContext作为MainWindowViewModel)。AutoGeneratingColumn命令, PassEventArgsToCommand = true }); }

另请参阅

在本文中
Baidu
map