[英]When to use event and command for WPF/MVVM?
我正在練習如何使用MVVM模式編寫WPF應用程序。 到目前為止,我還沒有在代碼中使用命令。 在我的Viewmodel中,我實現INotifyPropertyChanged
並用於觸發(事件PropertyChangedEventHandler PropertyChanged
)事件。 為什么我仍然想念WPF有關如何使用命令的某些概念?
什么時候適合使用命令?
WPF中的命令用於抽象用戶觸發的操作(例如單擊“ Button
或按某個鍵)。
這是一個基本示例:
假設您要在用戶單擊“搜索”按鈕或在聚焦搜索框時按Enter鍵時在數據庫中搜索員工。
您可以這樣定義ViewModel:
public class MyViewModel: ViewModelBase
{
public string SearchText {get;set;} //NotifyPropertyChanged, etc.
public Command SearchCommand {get;set;}
public MyViewModel()
{
//Instantiate command
SearchCommand = new DelegateCommand(OnSearch);
}
private void OnSearch()
{
//... Execute search based on SearchText
}
}
和您的觀點:
<StackPanel>
<TextBox Text="{Binding SearchText, UpdateSourceTrigger=PropertyChanged}">
<TextBox.InputBindings>
<KeyBinding Key="Enter" Command="{Binding SearchCommand}"/>
</TextBox.InputBindings>
</TextBox>
<Button Content="Search" Command="{Binding SearchCommand}"/>
</StackPanel>
注意,如何將KeyBinding
和Button的Command
屬性都綁定到ViewModel中的同一Command( SearchCommand
)。 這有利於重用,還有助於將ViewModel的實際邏輯及其所有優點(可測試性等)保留在ViewModel中,同時保持視圖整潔且無需編寫代碼。
有趣的是,絕對不需要使用WPF中的原始Commands概念:)。 您可以使用大型MVVM和免費的開源應用程序框架庫Caliburn.Micro來充分利用松耦合設計(xaml)和業務邏輯(c#/ vb代碼)的美感來構建大型復雜的應用程序。
免責聲明 :我只是這個庫的快樂用戶,並且與它的創建者沒有任何關系,因此這不是付費廣告或類似的東西。
請看一下官方文檔中的這個非常基本的示例 :
-> 基本配置,操作和約定 <-
這樣,您就可以將XAML視圖中的事件直接綁定到C#視圖模型中的方法中,而不會給命令聲明和注冊帶來麻煩(例如在其他類似的應用程序框架中實現)代理代碼。
沒關系,此示例是Silverligh應用程序-Caliburn.Micro幾乎以相同的方式支持所有主要的Xaml平台 ,並且WPF示例與基於Silverlight的外觀非常相似。
除了提到的主要功能(基於方法)之外,Caliburn.Micro還具有:
只要給它機會,您就不再需要香草WPF命令;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.