在項目中使用Command綁定能夠使我們的代碼更加的符合MVVM模式。不了解的同學可能不清楚,只有繼承自ButtonBase類的元素才可以直接綁定Command(Button、CheckBox、RadioButton等)
<Button Content="Normal" Command="{Binding NormalEventCommand}" ></Button>
如果我們要處理Label或者其他的一些控件,那麼只能在走事件:
<Label Content="Label Event" MouseDoubleClick="Label_MouseDoubleClick_1"></Label>
這樣的話,我們不得不在窗體類中處理事件代碼和部分邏輯,這樣就無法得到干淨的MVVM模式了,那麼我們應該怎麼做呢?
Blend為我們提供了解決方案,我們安裝Blend以後,便可以獲取到System.Windows.Interactivity.dll,添加該dll到項目引用
<Window x:Class="WpfApplication1.Window2" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" xmlns:vm="clr-namespace:WpfApplication1" Title="Window2" Height="124" Width="214"> <Window.DataContext> <vm:Window2ViewModel /> </Window.DataContext> <Grid> <Button Name="btn" Content="Button" Height="33" HorizontalAlignment="Left" Margin="40,24,0,0" VerticalAlignment="Top" Width="109"> <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> <i:InvokeCommandAction Command="{Binding Command1}" CommandParameter="10" /> </i:EventTrigger> <i:EventTrigger EventName="MouseMove"> <i:InvokeCommandAction Command="{Binding Command2}" CommandParameter="{Binding ElementName=btn}" /> </i:EventTrigger> </i:Interaction.Triggers> </Button> </Grid> </Window>
需要注意Window標簽中的
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity",這裡相當於後台的using System;之類的加載程序集的功能
查看本欄目