WPF代码隐藏等效

时间:2011-10-14 19:24:07

标签: c# wpf button code-behind

在开发时,我喜欢尝试理解的不仅仅是“只是这样做”。特别是对于WPF,我喜欢从GUI(xaml)和代码隐藏中理解绑定的两个方面。话虽如此,我想知道以下代码的等价物。

我有一个带有一些预定义“ICommand”实例的ViewModel,例如添加,编辑,保存,取消,退出等等 - 它们按预期工作。现在,看看有一个按钮的View(Window)的绑定,我将它绑定到命令,类似于。

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

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

这背后的代码背后是什么样的。我知道对于属性,例如IsEnabled或IsVisible绑定到依赖对象/属性,但是我不理解绑定到命令执行时的相关性。感谢。

1 个答案:

答案 0 :(得分:5)

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

例如,

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

命令绑定期望绑定到ICommand类型的对象。当他们执行时,例如按钮点击,他们首先调用ICommand.CanExecute(),如果是,则调用ICommand.Execute()。如果设置了CommandParameter属性,那么在评估CanExecuteExecute

时会使用该属性

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

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