我有一個用戶控件,增加了一個對的CommandBinding是化CommandBindings收集處理特定的命令。稍後,我在窗口中使用此控件,並希望將另一個綁定添加到該控件以添加其他行爲。這個問題雖然是我這樣做的時候,似乎當我再添給的CommandBinding控制,它會替換所有綁定的化CommandBindings收集同一命令已經作出。所以看起來像一個控件只能有一個CommandBinding控件,這是正確的嗎?我可以在同一個控件上使用同一個命令的多個CommandBindings嗎?
請參考下面它試圖設置兩個化CommandBindings爲同一保存命令的代碼示例。
<Window x:Class="MultipleCommandBindings.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.CommandBindings>
<CommandBinding Command="Save"
Executed="CommandBinding_Executed" />
<CommandBinding Command="Save"
Executed="CommandBinding_Executed" />
</Window.CommandBindings>
<Grid>
<Button Height="23"
HorizontalAlignment="Right"
Margin="0,0,25,88"
Name="button1"
VerticalAlignment="Bottom"
Width="75"
Command="Save">Button</Button>
</Grid>
本來我是希望無論是編譯時和運行時異常時,寫了這個代碼,但感到驚訝的是它並沒有抱怨。接下來,雖然我感到失望,因爲我的CommandBinding_Executed處理程序只被調用一次而不是我希望的兩次。
更新: 有點測試看來,我的第二個時的CommandBinding不覆蓋我的第一個,而是它出現,即使我沒有設置進行處理,以真正在我的事件處理程序的第一個命令綁定後吞噬指揮官。我在這一點上,解決我的問題是要了解爲什麼路由命令不傳播過去處理好未設置爲true,即使在第一處理非常肯定。
更新: 我發現的這恰恰印證了一些在WPF命令路由背後的奇怪行爲的信息this great little tidbit。
更新: 人想過如何解決這似乎只能有每個命令一個有效的CommandBinding的事實是,它似乎是默認的CommandBinding類公開執行,CanExecute當然的事件,像所有的事件可以有多個處理程序。然後,這個想法就是用標準的CommandBindings.Add方法來爲命令添加額外的處理程序。也許這可以通過Control類的擴展方法來完成,並且可以與一個自定義的CompositeCommandBinding類結合使用,該類允許我們在一個主綁定中聚合多個綁定。
我能想到的唯一的解決辦法是訂閱按鈕的Click事件,然後投View的DataContext的是它的視圖模型和使用的VAR手動執行2個命令。 – 2015-04-02 15:08:32