是否存在不通过wpf中的视图模型来挖掘命令的方法

本文关键字:模型 方法 命令 视图 是否 wpf 存在 | 更新日期: 2023-09-27 18:09:10

这个问题很简单,但我无法准确掌握如何做。

我决定使用WPF,但我不想以经典的方式实现一些MVVM模式。

在我的项目中,我决定用INPC创建我的模型,并将它们用作XAML的提要,就好像它们也是视图模型一样。。因此,与其拥有:
视图(<-Binding->(视图模型(<-INPC->(模型

我设计的是:
查看(<-Binding->(模型

当然,限制是该模型必须实现INPC,然而,与实践中的经典MVVM相比,该模型也需要实现INPC——所以我发现我的这是完全可以的,是DRY原则指导下的一条高效快捷方式。

我也想支持命令,我喜欢命令的概念,我了解如何在使用视图模型时实现命令。然而,正如我所描述的,我决定跳过视图模型。

因此,如果我有如下命令:

public class MyCommand : ICommand
{
    public event EventHandler CanExecuteChanged;
    public void Execute(object parameter)
    {
    //do somthing
    }
    public bool CanExecute(object parameter)
    {
        return true;
    }
}

我的XAML看起来是这样的:

<UserControl x:Class=... blah blah...
 xmlns:Model="clr-namespace:MyProject.BusinessLogic.Person"
 xmlns:Commands="clr-namespace:MyProject.Commands">
<TextBox Text="{Binding FirstName}" />
<Button Command="What do I put here?" />
<UserControl>

那么,我在button命令中放了什么来允许它调用MyCommand(哪个不在模型中(?

是否存在不通过wpf中的视图模型来挖掘命令的方法

您可能需要阅读以下内容:http://wpfglue.wordpress.com/2012/05/07/commanding-binding-controls-to-methods/

其想法是拥有可重用的组件,这些组件允许创建CommandBinding,该CommandBinding调用模型中的方法,并且可以在XAML中进行配置。因此,"管道"将由这些组件完成,而模型将只实现与业务相关的方法。

这可以概括为我称之为ViewModelKit的东西,即一组组件,它们可以作为XAML中的资源进行组装,并涵盖ViewModel的常见作业。

您确实需要一个视图模型,而这正是您的表示逻辑应该去的地方,包括命令。

您的模型显然不能引用ICommand等,因为它位于System.Windows.Input命名空间中,所以您需要一种将模型与视图连接起来的类型,即视图模型。

如果您不希望完全遵循模式并且希望避免将所有视图模型调用委派给模型,则可以将模型作为视图模型上的属性公开。

另一个考虑因素是,如果你在做MVVM,那么你真的应该使用MVVM框架。它们将提供一种替代指挥的方法,这种方法有局限性。

例如,如果您希望重新想象您的UI,以便在未启用Button时隐藏它,那么您无法通过命令轻松实现这一点。

像Caliburn.Micro这样的MVVM框架提供了Actions,它提供了许多优于命令的好处。