Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否仍然可以不通过wpf中的viewmodel垂直排列命令?_C#_Wpf_Xaml_Mvvm_Icommand - Fatal编程技术网

C# 是否仍然可以不通过wpf中的viewmodel垂直排列命令?

C# 是否仍然可以不通过wpf中的viewmodel垂直排列命令?,c#,wpf,xaml,mvvm,icommand,C#,Wpf,Xaml,Mvvm,Icommand,这个问题很简单,但我没能准确地掌握怎么做 我决定使用WPF,但我不想以经典的方式实现一些MVVM模式 在我的项目中,我决定使用INPC创建模型,并将它们用作XAML的提要,就像它们也是视图模型一样。。因此,不要有: 视图()视图-模型()模型 我设计的是: 视图()模型。 当然,约束条件是模型必须实现INPC,但是与实践中的经典MVVM相比,模型也需要实现INPC,所以我发现这是一条完全正确的生产捷径,遵循DRY原则 我也想支持命令,我喜欢命令的概念,并且我了解如何在使用视图模型时实现命令。然而

这个问题很简单,但我没能准确地掌握怎么做

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

在我的项目中,我决定使用INPC创建模型,并将它们用作XAML的提要,就像它们也是视图模型一样。。因此,不要有:
视图()视图-模型()模型

我设计的是:
视图()模型。

当然,约束条件是模型必须实现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>

那么,我在按钮命令中添加了什么来允许它调用MyCommand呢
(哪个不在模型中)?

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

您的模型显然不能对
ICommand
等进行任何引用,因为它位于
System.Windows.Input
命名空间中,因此您需要一个连接模型和视图的类型,即视图模型

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

另一个需要考虑的问题是,如果你在做MVVM,那么你就可以。他们将提供一种替代指挥的方法,这种方法有局限性

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


MVVM框架(如提供)提供了许多优于命令的好处。

您可能需要阅读以下内容:

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


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

Plump命令?现在这个术语有那么奇怪吗?哈哈,对不起,我会修正它-我是说铅垂:)这看起来很奇怪,当然任何命令都与表示逻辑有关,视图模型正是放置它的地方logic@devdigital不,不你在那里改变了问题。。假设我不想要一个视图模型——是否可以从XAML调用命令?这就是我要说的,您确实想要一个视图模型,这就是您的表示逻辑应该去的地方,包括命令。您的模型显然不能引用ICommand等,因为它位于System.Windows.Input命名空间中,所以您需要一个将模型与视图连接起来的类型,即视图模型。如果您不希望完全遵循该模式,并且希望避免将所有视图模型调用委派给模型,则可以将该模型作为视图模型上的属性公开。实际上,如果您希望隐藏禁用的按钮,则可以通过一个触发器轻松实现这一点,具体取决于IsEnabled=false。在这种情况下,按钮是如何被禁用的并不重要。如果您想保持按钮处于启用状态,但单击按钮时会弹出一个对话框,表示无法执行该操作,该怎么办?@devdigital请包含您给我的评论中的答案,以便我相信该答案是真正解决我问题的答案。(将模型作为属性包含并在VM中公开-这消除了重新声明所有属性和规范化架构的需要)@devdigital:cool idea,以前从未想过这一点。我不知道用扳机怎么做。我可能会修改我在回答中提到的一个助手组件来实现这种行为。