WPF代码隐藏等效
本文关键字:隐藏 代码 WPF | 更新日期: 2023-09-27 18:11:13
在开发时,我喜欢尝试和理解比"只是这样做"更多的东西。特别是对于WPF,我喜欢理解绑定的两个方面……无论是从GUI (xaml)还是从代码隐藏。话虽如此,我想知道以下代码的等效代码是什么。
我有一个ViewModel与一些预定义的"ICommand"实例,如添加,编辑,保存,取消,退出,无论什么-他们的工作预期。现在,看看视图(窗口)的绑定它上面有一个按钮,我把它绑定到命令上,比如。
<Button Command="{Binding ExitCommand}" Content="Exit" ... />
,这正确地做了我所期望的允许表单退出(并做任何其他我正在玩的)。
这种情况下的代码隐藏是什么样子的?我知道,与属性,如IsEnabled或IsVisible被绑定到依赖对象/属性,但我不明白绑定到命令执行时的相关性。谢谢。
创建命令绑定的方式与在后面代码中创建任何其他绑定的方式相同。
例如
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
属性,则在计算CanExecute
和Execute
时使用它
对于具有命令绑定的WPF按钮,IsEnabled
属性会自动绑定到ICommand.CanExecute
的结果。CanExecute
方法在按钮首次加载时运行一次,并在命令绑定更改时再次运行。
如果您希望它更频繁地更新,例如当CommandParameter
更改时,您需要连接一些额外的东西来在CommandParameter
更改时更新绑定。我看到的大多数RelayCommands
都内置了这种行为,例如MVVM Light的RelayCommand
,尽管其他命令如Microsoft PRISM的DelegateCommand
默认情况下没有这种行为。