一、前言
我們都知道WPF中的命令在結(jié)合MVVM模式的框架使用之后(框架重新實現(xiàn)了ICommand),可以解耦。但并不是所有控件都可以綁定命令的,比如TextBox、ComboBox等。在使用這類控件時,如果你想讓它的某個事件激發(fā)時調(diào)用ViewModel中的方法,往往需要把ViewModel中的方法暴露給View,然后在事件處理器中調(diào)用。這種調(diào)用方式增加了耦合度,雖然從短期實現(xiàn)來講也沒啥問題,但會讓強迫癥患者非常難受。
二、解決方法
目前收集了兩種解決方法:
2.1. InputBindings
這使UIElement類自帶的一個屬性,
你可以給它添加鼠標(biāo)按鍵綁定和鍵盤按鍵綁定:
<TextBox Text="{Binding CurrentPage}" >
<TextBox.InputBindings>
<KeyBinding Command="{Binding GotoPageCommand}" Key="Return"/>
</TextBox.InputBindings>
</TextBox>
所以這也算是環(huán)境自帶的一種方法,一定程度上能解決大部分問題。常見的比如,在文本框按下回車鍵觸發(fā)命令,它可以輕松實現(xiàn)。
但有時,我們想給環(huán)境自帶的事件綁定命令,這就需要用到第二種方法了。
2.2. Behaviors包
Microsoft.Xaml.Behaviors.Wpf雖然不是環(huán)境自帶的,但你可以通過NuGet輕松獲得它。
使用方式也非常簡單,
資源引用:
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
XAML中調(diào)用:文章來源:http://www.zghlxwxcb.cn/news/detail-451894.html
<ComboBox ItemsSource="{Binding Gasolines}" SelectedIndex="{Binding CurrentIndex}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Type}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
<!--Behaviorsd的事件觸發(fā)器使用-->
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding DisplayPriceCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</ComboBox>
三、結(jié)語
兩種都屬于應(yīng)用型的方法,會用即可,不必深究。文章來源地址http://www.zghlxwxcb.cn/news/detail-451894.html
到了這里,關(guān)于WPF——事件綁定命令的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!