1

我有一个 ViewModel 使用DelegateCommand属性绑定到ButtonCommand属性。

问题是我的示例数据不喜欢该DelegateCommand对象。它抱怨说:The type "DelegateCommand" does not include any accessible constructors.此外,唯一暴露的财产是IsActive财产。

<local:MyViewModel xmlns:local="clr-namespace:MyNamespace"
                   xmlns:prism="http://www.codeplex.com/prism">
    <local:MyViewModel.Age>47</local:MyViewModel.Age>
    <local:MyViewModel.PurchaseAlcohalCommand>
        <prism:DelegateCommand IsActive="True" />
    </local:MyViewModel.PurchaseAlcohalCommand>
</local:MyViewModel>
4

2 回答 2

1

DelegateCommand的设置方式,它在激活时不会做任何事情。如果这是所需的行为,我的建议是根本不声明它。WPF 将优雅地处理绑定到null ICommand对象。

或者,如果您需要将其绑定到实例化的 DelegateCommand,您可以子类化DelegateCommand以包含无参数构造函数。

如果您希望它绑定到 aDelegateCommand并且您希望它在触发命令时DelegateCommand实际执行某些操作,那将变得更加复杂。您必须使用DelegateCommand我之前提到的子类,但您还必须能够在 XAML 中定义委托。我认为那里有样本,但我猜它们涉及诸如标记扩展之类的东西。您对这种方法的投资回报率可能会有点低,但您的里程可能会有所不同。

最后一种选择是通常处理的方式:DelegateCommands 在 ViewModel 的构造函数中定义你的。

于 2011-12-07T16:52:55.440 回答
1

更改您的视图模型以公开 ICommand 而不是 DelegateCommand。DelegateCommand 只是 ICommand 的一个实现;如果您以后想从 MvvmLight 切换到 RelayCommand,则您的视图和示例数据不必关心。

我不确定这是否会解决您的问题,但我怀疑它可能会。另外,这只是一个很好的编程习惯。

于 2011-12-01T18:34:22.813 回答