我有一个ViewModel,它使用DelegateCommand属性绑定到Button的Command属性。
问题是我的样本数据不喜欢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>发布于 2011-12-02 02:34:23
更改视图模型以公开ICommand而不是DelegateCommand。DelegateCommand只是ICommand的一个实现;如果您以后想从MvvmLight切换到RelayCommand,那么您的视图和示例数据就不必关心了。
我不确定这是否会解决您的问题,但我怀疑它可能会。另外,这只是一个很好的编程实践。
发布于 2011-12-08 00:52:55
按照你的DelegateCommand设置方式,当它被激活时,它不会做任何事情。如果这是想要的行为,我的建议是简单地不声明它。WPF将优雅地处理绑定到null ICommand对象。
或者,如果您需要将其绑定到实例化的DelegateCommand,则可以子类DelegateCommand以包含无参数构造函数。
如果你想让它绑定到一个DelegateCommand上,并且你想让这个DelegateCommand在命令被触发的时候DO,那就有点复杂了。您必须使用我前面提到的子类化的DelegateCommand,但您还必须能够在XAML中定义委托。我认为有一些示例,但我猜它们涉及诸如标记扩展之类的东西。您在此方法中的投资回报可能有点低,但您的里程数可能会有所不同。
最后一种选择是通常的处理方式:在ViewModel的构造函数中定义DelegateCommands。
https://stackoverflow.com/questions/8345921
复制相似问题