WPF代码隐藏等效

本文关键字:隐藏 代码 WPF | 更新日期: 2023-09-27 18:11:13

在开发时,我喜欢尝试和理解比"只是这样做"更多的东西。特别是对于WPF,我喜欢理解绑定的两个方面……无论是从GUI (xaml)还是从代码隐藏。话虽如此,我想知道以下代码的等效代码是什么。

我有一个ViewModel与一些预定义的"ICommand"实例,如添加,编辑,保存,取消,退出,无论什么-他们的工作预期。现在,看看视图(窗口)的绑定它上面有一个按钮,我把它绑定到命令上,比如。

<Button Command="{Binding ExitCommand}" Content="Exit" ... />

,这正确地做了我所期望的允许表单退出(并做任何其他我正在玩的)。

这种情况下的代码隐藏是什么样子的?我知道,与属性,如IsEnabled或IsVisible被绑定到依赖对象/属性,但我不明白绑定到命令执行时的相关性。谢谢。

WPF代码隐藏等效

创建命令绑定的方式与在后面代码中创建任何其他绑定的方式相同。

例如

Binding b = new Binding();
b.Source = myViewModel;
b.Path = new PropertyPath("ExitCommand");
MyButton.SetBinding(Button.CommandProperty, b);

命令绑定期望绑定到类型为ICommand的对象。当它们被执行时,例如Button Click,它们首先调用ICommand.CanExecute(),如果这是真的,那么它们调用ICommand.Execute()。如果设置了CommandParameter属性,则在计算CanExecuteExecute时使用它

对于具有命令绑定的WPF按钮,IsEnabled属性会自动绑定到ICommand.CanExecute的结果。CanExecute方法在按钮首次加载时运行一次,并在命令绑定更改时再次运行。

如果您希望它更频繁地更新,例如当CommandParameter更改时,您需要连接一些额外的东西来在CommandParameter更改时更新绑定。我看到的大多数RelayCommands都内置了这种行为,例如MVVM Light的RelayCommand,尽管其他命令如Microsoft PRISM的DelegateCommand默认情况下没有这种行为。