我正在练习如何使用MVVM模式编写WPF应用程序。到目前为止,我还没有在我的代码中使用命令。在我的Viewmodel中,我实现了INotifyPropertyChanged
并使用(事件PropertyChangedEventHandler PropertyChanged
)来触发事件。
为什么我觉得我仍然错过了一些关于如何使用命令的WPF概念?
何时使用命令?
答案 0 :(得分:11)
Commands用于抽象用户触发的操作(例如单击Button
或按键。
这是一个基本的例子:
假设您想在用户点击“搜索”按钮时搜索数据库中的员工,或者在聚焦搜索框时点击回车键。
您可以像这样定义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中的同一命令(SearchCommand
)的。这有利于重用,还有助于保持ViewModel中的实际逻辑,具有所有优点(可测试性等),同时保持视图干净和无代码。
答案 1 :(得分:0)
有趣的是,绝对不需要使用WPF中的原始命令概念:)。您可以构建大型复杂的应用程序,只需使用MVVM和免费的开源应用程序框架库,就可以实现松散耦合设计(xaml)和业务逻辑(c#/ vb代码)的所有优点。 Caliburn.Micro 强>
免责声明:我只是这个图书馆的快乐用户,与其创作者没有任何关系,所以这不是付费广告或类似的东西。
请稍微查看官方文档中非常基本的样本:
- &GT; Basic Configuration, Actions and Conventions&lt; -
并且您将从您的XAML视图中直接填充绑定事件的功能到C#view-model 中的方法,而不会出现用于命令声明和注册的代理代码(如此在其他类似的实现中)应用程序框架)。
并且不要紧,这个示例是Silverligh应用程序 - Caliburn.Micro 支持所有主要的Xaml平台几乎相同的方式,WPF示例看起来很像基于Silverlight的。
除了提到的主要功能(buinding to methods)之外,Caliburn.Micro还有:
只要给它机会,你将永远不需要vanilla WPF命令;)