【问题标题】:MVVM and custom commands?MVVM 和自定义命令?
【发布时间】:2016-01-11 12:37:10
【问题描述】:

我在这里需要一些答案,因为在网上似乎找不到太多可以回答我的问题。据我了解,在编写 WPF 应用程序时要遵循 MVVM 工作流程,数据、逻辑和用户输入需要分开。

所以,按照这个逻辑,我猜我会创建一个名为Classes 的文件夹,然后创建一个名为Commands.cs 的类文件。

Commands.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Duplicate_Deleter.Classes
{
    class WindowCommands
    {

    }
    class DatabaseCommands
    {

    }
    class OtherCommands
    {

    }
}

那么我必须在我的 XAML 中引用这个类文件,以便我的用户输入窗口知道该命令是正确的吗?

<Window
xmlns:local="clr-namespace:Classes.Commands">
</Window>

然后我当然会设置命令,以便它知道每种状态使用哪种方法,例如:

<Window.CommandBindings>
        <CommandBinding Command="WindowCommands.WindowClose" Executed="CloseWindow_Executed" CanExecute="CloseWindow_CanExecute" />
        <CommandBinding Command="WindowMinimize" Executed="CloseWindow_Executed" CanExecute="CloseWindow_CanExecute" />
    </Window.CommandBindings>

我在这里思考吗?如果我做错了,有人可以澄清这一点或解释如何做我正在尝试的事情吗?

【问题讨论】:

  • 您的意思是 MVVM,而不是 MVVP,对吧?否则什么是 MVVP?
  • 废话!对不起!大声笑
  • 我不知道你从哪里得到这些信息,但我建议永远不要回到这些地方。

标签: c# wpf mvvm command commandbinding


【解决方案1】:

马丁,

让我们把事情说清楚。

命令是 MVVM 的重要组成部分。

但大多数时候命令(ICommand 的实现者)是 ViewModel 对象的属性。

public class MyViewModel{
   public ICommand SaveCmd { get; set; }
}

按钮和菜单项等命令源绑定到命令:

<Button Command="{Binding SaveCmd}" Content="Save" />

ICommand 包含两个方法:

  1. void Execute(...) - 他们做了什么
  2. bool CanExecute(...) - 告诉 GUI 禁用按钮、菜单项...

命令位于 ViewModel 端,因此它们可以轻松地为视图调整数据,如果数据不正确而无法执行命令,则会被禁用。

您展示的所有内容:CommandBindings,很有趣,但很少使用。

  • 使用 CommandBindings,您可以在 GUI 端附加代码以及所有回调(Executed、PreviewExecutes、CanExecute、PreviewCanExecute)

  • 您还可以使用 InputBindings 绑定一些与命令对应的输入手势(键盘或鼠标)

  • 有一些预定义的命令,例如 ApplicationCommands(Save, New,...),但由您来定义行为以及它们的作用。

  • 这些 CommandBinding 的有趣之处在于,它们从层次结构(窗口)的根“隧道”到目标,并“冒泡”到根。
    跨越层次结构中的每个级别(Grid、Stackpanel、ListBox...),可以在任何级别处理(和停止)事件

希望对你有帮助,问候

【讨论】:

猜你喜欢
  • 2010-12-23
  • 1970-01-01
  • 2011-12-02
  • 1970-01-01
  • 2014-03-17
  • 2010-12-15
  • 2014-04-06
  • 1970-01-01
相关资源
最近更新 更多