c# - 有什么方法更容易绑定到视图模型中的点击事件?
问题描述
我即将将点击事件绑定到 .Net 5 中的视图模型。
有很多关于这个的教程。通过使用第三方 MVVM Light 工具包,或者通过添加一个继承的类ICommand
(就像这个按钮点击在 WPF MVVM 中是如何工作的?)。最后,最麻烦的方法是原始微软教程(命令概述)。
所有这些都很麻烦,而且教程是很久以前的事了。
更重要的是,.Net 5 中似乎不再存在最初的 Microsoft 方式( Commanding Overview )。
我想知道是否有一种简单的方法可以实现这一目标?
解决方案
您来源的所有方法都是适用于不同场景的有效方法。
- 使用
ICommand
likeRelayCommand
or的派生词DelegateCommand
(大多数 MVVM 框架提供自己的实现,在某些方面有所不同,但它们使用相同的概念) CommandBinding
s 用于路由命令,例如ApplicationCommands
InputBinding
KeyBinding
s 用于对按键手势 ( ) 或鼠标手势 (MouseBinding
)做出反应EventTrigger
触发特定事件时使用调用命令 (EventToCommand
)
MSDN 上也有一篇文章解释了RelayCommand
和EventToCommand
机制。
.所有这些方法在 .NET 5 中仍然存在。但是,如果你想使用行为或触发器(如上面提到的EventToCommand
,你应该使用新的Microsoft.Xaml.Behaviors.Wpf NuGet 包而不是Blend 附带的旧交互程序集.
我不会假设有“原始的 Microsoft 方式”,这取决于您的要求。为了将按钮单击绑定到视图模型上的操作,您通常会使用该RelayCommand
方法。在您链接的帖子和MSDN 上的链接中,您都可以找到RelayCommand
. 如果您决定使用任何 MVVM 框架,例如 Caliburn.Micro、Prism 或 MVVM Light,那么已经有一个内置的实现。
您将ICommand
在视图模型中公开一个属性并在构造函数中对其进行初始化。
public class MyViewModel : INotifyPropertyChanged
{
public MyViewModel()
{
MyCommand = new RelayCommand(ExecuteMyCommand, CanExecuteMyCommand);
}
public ICommand MyCommand { get; }
private bool CanExecuteMyCommand(object obj)
{
// ...obj is the optional command parameter.
// ...return whether your command can execute.
}
private void ExecuteMyCommand(object obj)
{
// ...obj is the optional command parameter.
// ...do something.
}
// ...other code.
}
然后你可以在你的视图中绑定命令。确保DataContext
您的视图已设置或绑定到您的视图模型的实例,否则绑定将不起作用。
<Button Content="My Button" Command="{Binding MyCommand}" CommandParameter="{Binding Content, RelativeSource={RelativeSource Self}}"/>
命令参数是可选的,我将它绑定到按钮的内容以进行演示。
推荐阅读
- python - 如何抑制来自 webbot 的警告?
- reactjs - 使用反应挂钩表单重定向到确认页面
- c# - SMO - 未找到 dbo 以外的模式中的表
- javascript - Webhook 已停止工作 firebase 条带扩展
- elasticsearch - 弹性搜索 Mustache 模板中的可选参数值
- swift - 在 WatckKit 中切换接口控制器时出现 WKInterfaceLabel 问题
- sqlite - 如何选择 21 天(或更早)前的记录?(sqlite)
- exploit - 如何利用 Web 项目中的漏洞(使用硬编码加密密钥)?
- python - 根据包含键的列表访问 defaultdict(dict)
- docker - 将文件夹链接到 docker 容器并在运行时填充