[英]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.