WPF 命令 - 在没有代码隐藏的情况下执行此操作

标签 wpf mvvm mvp command

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

我的问题是这种方法似乎需要我在代码隐藏中添加大量代码。我试图让我的表示层尽可能薄,所以我宁愿这个代码/逻辑在我的演示者(或 ViewModel)类中,而不是在代码隐藏中。任何人都可以提出一种无需代码隐藏即可实现相同目标的方法吗?

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

<Window.CommandBindings>
    <CommandBinding 
        Command="ApplicationCommands.Save"
        CanExecute="CommandBinding_CanExecute"
        Executed="CommandBinding_Executed"
    />
</Window.CommandBindings>

我的代码隐藏看起来有点像这样:
private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
    e.CanExecute = (
        _presenter.SelectedStore != null &&
        _presenter.SelectedStore.IsValid);
}

最佳答案

Model-View-ViewModel (MVVM) 设计模式旨在实现该目标,而 Josh Smith 的 excellent article解释如何应用它。

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

由于您已经有一个演示者对象,您可以让该类公开一个 ICommand实现所需逻辑的属性,然后将 XAML 绑定(bind)到该命令。这一切都在文章中进行了解释。

关于WPF 命令 - 在没有代码隐藏的情况下执行此操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1542664/

相关文章:

mvp - 如何使用嵌套/复合演示者进行 MVP?

c# - 如何在 C# 中使用别名命名空间

wpf - 当文本在 TextBlock 内换行时,ActualHeight 不正确

wpf - 如何以编程方式将新元素停靠到 DockPanel

wpf - 如何根据 TextBox 值绑定(bind)控件的可见性(StackPanel)?

gwt - 易于使用的框架,以最少的编码使用 GWT MVP

c# - 删除 XAML 用户控件上的 DataContextChanged/Loaded 事件处理程序

c# - 绑定(bind)到属性并传递自定义 StringFormat

javascript - 使用 Handlebars.js 时如何将模板 js 外包到不同的文件

model-view-controller - WinJS:MVVM、MVP 或 MVC 更适合它吗?