WPF 介面如何繫結Command

唐宋元明清2188發表於2018-06-21

WPF中,我們使用MVVM,在ViewModel中定義Command和其業務邏輯,介面繫結Command。

那麼是不是所有的事件都可以定義Command呢,然後將業務全部放在ViewModel中呢?

介面CommandBindings

如果只是互動的處理,可以直接定義RoutedCommand即可

1. 新增Command

1 <RoutedCommand x:Key="SelectAllCommand"/> 

2. 新增命令委託處理

1 <UserControl.CommandBindings>
2     <CommandBinding Command="{StaticResource  SelectAllCommand}" Executed="SelectAllExecuted"/>
3 </UserControl.CommandBindings>

3. 繫結Command

1 <CheckBox Name="AllSelectCheckBox" Command="{StaticResource SelectAllCommand}" />

 

InvokeCommandAction

控制元件不只有Button,還有其它很多TextBox/ListBox等控制元件甚至自定義控制元件的KeyDown/MouseUp/LostFocus等事件以及自定義的事件。

我們都知道Buttton有Command屬性(對應Click事件),直接繫結相應的Command就可以了,那麼除Button.Click事件之外的事件怎麼繫結?

CommandAction是Trigger與Command的中間轉換器

通過InvokeCommandAction 的使用,WPF任意事件都可以繫結Command,將業務邏輯放在ViewModel中。如:

自定義Command,請參考https://www.cnblogs.com/kybs0/p/7523654.html

案例:下載 System.Windows.Interactivity.dll,引用後就可以直接使用如下的Interaction了。

1     <Button x:Name="SearchingButton">
2         <i:Interaction.Triggers>
3             <i:EventTrigger EventName="MouseDown">
4                 <i:InvokeCommandAction Command="{Binding SearchCommand}" 
5                                         CommandParameter="{Binding ElementName=SearchingTextBox,Path=Text}"/>
6             </i:EventTrigger>
7         </i:Interaction.Triggers>
8     </Button>

 

 快捷鍵繫結

通過Key值,繫結ViewModel中相應命令

1 <UserControl.InputBindings>
2     <KeyBinding Key="Delete" Command="{Binding MenuDeleteCommand}" />
3 </UserControl.InputBindings>

 

相關文章