WPF使用MVVM(三)-事件轉命令
上一節介紹了WPF中的命令,可是僅僅介紹的是WPF框架給我們提供的點擊命令,也就是用Command屬性來綁定一個命令,用來響應按鈕的點擊行為!顯然這是不夠的,界面中除了點擊行為以外,還有很多其他行為,諸如鼠標移入,鼠標移出。。。
下面我們就將介紹一下,如何為這些行為綁定命令。
為其他行為綁定命令
在為其他行為綁定命令的時候呢,我們需要引入一個外部的dll文件,叫做System.Windows.Interactivity.dll,直接打開NuGet包管理器,搜索、安裝到項目中即可:
在安裝包的過程中可以看到,此包已經不受維護了,但是不影響我們此次的演示。
下面我們就將演示鼠標移入行為,實現鼠標移入按鈕,按鈕字體顏色改變的效果
首先需要為Xaml界面中引入一下上面安裝包的命名空間:
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
接下來,我們去到之前Button按鈕的位置,改成如下結構:
<Button
x:Name="btnUpdate"
Grid.Row="3"
Grid.ColumnSpan="2"
Margin="20"
Command="{Binding ClickAction}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self}}"
Content="更新一下信息"
FontSize="30"
FontWeight="Bold">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseEnter">
<i:InvokeCommandAction
Command="{Binding MouseEnterAction}"
CommandParameter="{Binding ElementName=btnUpdate}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
這里演示的是將MouseEnter事件綁定到命令MouseEnterAction上
注意,這里給Button按鈕添加了一個Name屬性,叫做btnUpdate,是為了方便傳參的時候,綁定此按鈕,將此按鈕當作參數傳入到后台!
然后我們去到MainWindowVM(ViewModel)中,實現好我們的命令,這里實現的跟之前一樣,是一個帶參數的命令:
/// <summary>
/// 命令要執行的方法
/// </summary>
void UpdateColorExecute(object sender)
{
Button button =sender as Button;
button.Foreground = Brushes.Red;
}
/// <summary>
/// 命令是否可以執行
/// </summary>
/// <returns></returns>
bool CanUpdateColorExecute()
{
return true;
}
/// <summary>
/// 創建新命令
/// </summary>
public ICommand MouseEnterAction
{
get
{
return new RelayCommand<object>(UpdateColorExecute, CanUpdateColorExecute);
}
}
接下來就看演示看到,鼠標移入的時候,按鈕字體顏色被修改了!
結語
到這里MVVM系列的說明就結束了,這幾篇文章舉例的部分可能過於簡單,甚至有些包都停止維護了,針對你日常的工作可能並沒有太大的幫助,重點還是了解一下MVVM以及如何使用他們。
后續可能會介紹一種特定的MVVM框架,盡量描述出工作中可能出現的情況或存在的問題!
見解
雖然MVVM能夠方便的實現數據的綁定,但是在前期的構建過程中也算是比較麻煩的,至於是否一定要使用MVVM,以及在任何地方都采用MVVM,還是自己決定,不過有些情況下采用MVVM模式反而會顯得更加復雜,此時采用傳統方案也是非常不錯的!
感謝你看到這里!