我在視圖中有一些重複代碼,它們是拖動&拖放操作的一部分。我在ViewModelBase上有一個ICommand,用於處理模型拖放操作所需的操作。因爲我試圖避免將UI事件參數傳遞給ViewModel,所以我需要將自己的參數類型傳遞給DropCommand。所以基本上我在View的代碼中的代碼看起來像這樣:調用在xaml中分配的ICommand
// get data required for ordering operation
var args = MyHelperClass.OnDropCompleted(a); // where a is an argument from UI drop event
// execute command
if (args != null) ViewModel.DropCommand.Execute(args);
這很好,但是,這個代碼在每個視圖上重複。我的想法是一個DropCommand添加到我的自定義UI控件,這樣我就可以分配的ICommand在XAML綁定現在
DropCommand={Binding DropSommand} <-- binds to ViewModel's DropCommand
,我能勝任我的定製UI控件拖放事件,並在視圖模型調用命令,並通過它計算出了論點。
問題:
1)我想訂閱Drop操作只有DropCommand的結合在XAML中設置。我如何檢查這個綁定是否設置?
2)創建要傳遞給ViewModel的ICommand的參數後,我想從代碼中調用此命令。我怎樣才能做到這一點?
編輯:我也有以下的綁定方案:
DropCommand={Binding DataContext.DropCommand, elementName=window}
嗨Jay,似乎我有一個問題得到命令參考。在這種情況下,我的綁定與上面提供的略有不同。我正在設置Path和ElementName。 ParentBinding爲Source返回null,併爲ElementName(其DataContext設置爲ViewModel的控件的名稱)和Path返回正確的值。我該如何處理這種情況? – Goran 2012-04-29 03:33:24
我能夠通過反射從BindingExpression獲取ICommand。 – Goran 2012-04-29 15:44:53