我刚刚开始使用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
和新数据放入命令中。以下是我想到的可能的解决方案以及我看到它们的错误
传递Tuple
。
object
,object[]
似乎还需要处理更多工作。我必须像命令行参数一样分开它。所以我的问题是:
如何使用ICommand
处理多个对象?
如果锁定它以返回ICommand
,如何使用void
处理不可变对象?
我的想法是关于什么命令离开基地?
(我已经尝试过为此寻找更好的教程或资源,但我的Google fu很弱,我似乎无法找到任何清晰简洁的内容。关于WPF中的命令有很多问题,但是它们都是针对非常具体的实现。我正在寻找关于在一个命令中操作多个对象的一般答案。)
更新
我一直在寻找网络,但我仍然没有找到像我的书提供的样本。我看过DelegateCommand
,这看起来像一个非常简单易用的系统。它仍然让我想知道为什么MVVM章节的这么大部分将专门用于使用ICommand
来创建自定义命令,而不是已经从其继承的其他类之一。