无法理解自定义命令用法

时间:2014-03-03 18:00:17

标签: c# wpf mvvm

我刚刚开始使用WPF,我希望尽可能使用自定义命令作为MVVM模式的一部分。我一直在使用的书(C#2010 All-in-One for Dummies)有一个自定义命令的示例,但它使用硬编码信息来完成其任务,我看不到如何使用命令系统来完成我的任务。

图书代码:

public abstract class CommandBase : ICommand
{
    public string Text { get; internal set; }

    public abstract void Execute(object parameter);

    public abstract bool CanExecute(object parameter);

    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }
}

public class AddCustomerCommand : CommandBase
{
    public AddCustomerCommand()
    {
        Text = “Add Customer”;
    }

    public override void Execute(object parameter)
    {
        var list = parameter as IList<Customer>;
        if (list == null)
        {
            return;
        }
        list.Add(new Customer { ID = 4, Name = “New Customer”} );
    }

    public override bool CanExecute(object parameter)
    {
        return parameter is IList<Customer>;
    }
}

在这种情况下,Execute有效,因为它传递了IList<Customer>并且可以添加它而无需返回任何内容。这对我来说非常有意义。

我的问题:

我有一个MVVM应用程序,它有一个数据网格,一些文本框和一些按钮。我的视图模型具有IList<Entry> Entries,文本框的属性,当然还有我的自定义命令AddEntryCommand的实例。目标是能够输入文字,点击添加,并使用Entry将新Entries添加到AddEntryCommand

我不明白的是如何将Entries和新数据放入命令中。以下是我想到的可能的解决方案以及我看到它们的错误

  1. 传递视图模型,以便其所有信息都可用。
  2. 传入一系列对象。
  3. 传递Tuple

    • 传递视图模型似乎过多,如果我这样做,那么视图模型上的所有内容都必须是可变的。
    • 我尽量避免使用objectobject[]似乎还需要处理更多工作。我必须像命令行参数一样分开它。
    • 元组......
    • 我对命令的想法是,它应该是一个带有花里胡哨的方法,可以让UI做出很好的反应。任何导致命令绑定到特定视图或视图模型的东西都会破坏这一点。
  4. 所以我的问题是:

    如何使用ICommand处理多个对象?

    如果锁定它以返回ICommand,如何使用void处理不可变对象?

    我的想法是关于什么命令离开基地?

    (我已经尝试过为此寻找更好的教程或资源,但我的Google fu很弱,我似乎无法找到任何清晰简洁的内容。关于WPF中的命令有很多问题,但是它们都是针对非常具体的实现。我正在寻找关于在一个命令中操作多个对象的一般答案。)

    更新

    我一直在寻找网络,但我仍然没有找到像我的书提供的样本。我看过DelegateCommand,这看起来像一个非常简单易用的系统。它仍然让我想知道为什么MVVM章节的这么大部分将专门用于使用ICommand来创建自定义命令,而不是已经从其继承的其他类之一。

0 个答案:

没有答案