2011-10-14 101 views
3

开发时,我喜欢尝试和了解比“仅仅这样做”更多的东西。特别是在WPF中,我喜欢从GUI(xaml)和代码隐藏两方面理解绑定的两个方面。这就是说,我想知道下面的代码等价物是什么。WPF代码隐藏等效

我有一个ViewModel与一些预定义的“ICommand”实例,如添加,编辑,保存,取消,退出等等,并且它们按预期工作。现在,看看具有按钮的视图(窗口)的绑定,我把它绑定到命令上,就像。

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

这正确地做了我希望允许表单退出(以及执行其他任何操作)的内容。

代码隐藏是什么样子的。我知道使用属性(如IsEnabled或IsVisible)绑定到依赖对象/属性,但我不明白绑定到命令执行时的关联。谢谢。

回答

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

当与具有约束力的命令按钮WPF所使用的IsEnabled属性被自动绑定到的ICommand.CanExecute结果。第一次加载按钮时将运行CanExecute方法,并在Command Binding更改时再次运行。

如果您希望更频繁地进行更新(例如CommandParameter更改时),则需要在CommandParameter更改时连接一些更新的绑定。大多数RelayCommands我看到有这种内置的,如MVVM Light的RelayCommand,虽然其他命令如Microsoft PRISM的DelegateCommand默认情况下不具有此行为。

+0

是的,得到了​​ICommand的一部分,但想确定,因为它看起来不像一个“属性”,但我猜WPF中的任何东西都是可绑定的...... :) – DRapp