WPF命令 - 没有代码隐藏的做法

Ste*_*eve 5 wpf mvp command mvvm

我正在使用MVVM模式构建一个WPF形式的简单数据输入应用程序.每个表单都有一个展示所有数据等的presenter对象.我想使用WPF命令启用和禁用编辑/保存/删除按钮和菜单选项.

我的问题是这种方法似乎要求我向代码隐藏添加大量代码.我试图保持我的表示层尽可能薄,所以我更倾向于这个代码/逻辑在我的演示者(或ViewModel)类中,而不是在代码隐藏中.任何人都可以提出一种方法来实现同样的事情而无需代码隐藏吗?

我的XAML看起来有点像这样:

<Window.CommandBindings>
    <CommandBinding 
        Command="ApplicationCommands.Save"
        CanExecute="CommandBinding_CanExecute"
        Executed="CommandBinding_Executed"
    />
</Window.CommandBindings>
Run Code Online (Sandbox Code Playgroud)

我的代码隐藏看起来有点像这样:

private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
    e.CanExecute = (
        _presenter.SelectedStore != null &&
        _presenter.SelectedStore.IsValid);
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ann 11

Model-View-ViewModel(MVVM)设计模式旨在实现这一目标,Josh Smith的优秀文章解释了如何应用它.

对于命令,您可以使用RelayCommand本文中描述的类.

由于您已经有一个presenter对象,因此您可以让该类公开一个ICommand实现所需逻辑的属性,然后将XAML绑定到该命令.这一切都在文章中解释过.