如何在代码中从视图对ViewModel设置或执行命令

本文关键字:设置 ViewModel 执行 命令 视图 代码 | 更新日期: 2023-09-27 18:16:27

我试图弄清楚如何从视图后面的代码中获得对ViewModel命令的引用,而无需直接的强类型引用。你可以在XAML中做到这一点,所以我觉得在代码中必须有一些简单的等同。我宁愿不要通过制作一个虚拟对象(如按钮)来作弊,但目前我愿意接受任何东西。

下面是我尝试过的一个例子:

Binding b = new Binding("SaveMessagesCommand");
b.Source = this.DataContext;
b.IsAsync = true;
Button myButton = new Button();
BindingOperations.SetBinding(myButton, Button.CommandProperty, b);
object par = null;
myButton.Command.Execute(par);

这个按钮真的不需要,但我找不到其他的东西。我想我还可以把按钮放在表单上,在XAML中绑定它的命令,隐藏它,然后直接引用它并执行命令。但是我觉得我应该能够在这个ViewModel上执行这个命令。

谁能告诉我怎么做这个?

如何在代码中从视图对ViewModel设置或执行命令

破解方法如下:在视图模型上创建命令属性。然后在该命令执行的时候给该命令附加一个委托(即方法处理程序)。然后,您可以在后台代码中注册一个事件,该事件最终将在引发事件时调用视图模型的命令。

真正的解决方案是实现一个附加的属性,它将作为基于您的一个控件的行为。当您注册附加属性时,您可以为附加属性的状态发生变化时提供方法处理程序。

下面的链接提供了附加属性的概述。