2011-10-14 144 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