2
我试图在XAML命令参数绑定为一个RelayCommand <MessageTokens
>如下,其中MessageTokens是一个枚举绑定枚举到MVVM光RelayCommand <T> CommandParameter
public ICommand OpenInvoiceWindowCommand
{
get
{
return _openInvoiceWindowCommand ??
(_openInvoiceWindowCommand = new RelayCommand<MessageTokens>(OpenInvoiceWindow, prm => CanExecuteOpenInvoiceWindowCommand));
}
}
的XAML是:
<Controls1:RadMenuItem Command="{Binding SupplierInvoiceViewModel.OpenInvoiceWindowCommand}" CommandParameter="{Binding Source={x:Type ShipmentDetails:DebitInvoiceViewModelBase}, Path=MessageTokens.SupplierInvoice}" Header="Register a supplier's invoice"/>
使用Telerik的RadGridView代码崩溃与
at GalaSoft.MvvmLight.Command.RelayCommand`1.CanExecute(Object parameter) at Telerik.Windows.Controls.RadMenuItem.CanExecuteApply() in c:\Builds\WPF_Scrum\HotFix_2010_Q3\Sources\Development\Controls\Navigation\Menu\RadMenuItem.cs:line 2105 at Telerik.Windows.Controls.RadMenuItem.ChangeCommand(ICommand oldCommand, ICommand newCommand) in c:\Builds\WPF_Scrum\HotFix_2010_Q3\Sources\Development\Controls\Navigation\Menu\RadMenuItem.cs:line 2124 at Telerik.Windows.Controls.RadMenuItem.OnCommandChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) in c:\Builds\WPF_Scrum\HotFix_2010_Q3\Sources\Development\Controls\Navigation\Menu\RadMenuItem.cs:line 1623 at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e) at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e) at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args) at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
等
如果我将参数更改为RelayCommand <string
>而不是RelayCommand <MessageTokens
>代码运行良好。
我不喜欢这样做,因为我失去了强烈输入我的参数的所有好处。
我怀疑我没有在XAML中正确声明枚举。我试过
CommandParameter = "<fullpath>..MessageTokens.SupplierInvoice>"
但在MVVMLight中给出了InvalidCastException。
有没有人有任何建议?
非常感谢 杰里米
编辑与解决方案
的问题是,因为我没有正确指在CommandParameter内部类的+号绑定。
正确的XAML应该是:
<Controls1:RadMenuItem Command="{Binding SalesInvoiceViewModel.OpenInvoiceWindowCommand}" CommandParameter="{x:Static local:DebitInvoiceViewModelBase+MessageTokens.SalesInvoice}" Header="Raise a sales invoice"/>
你可以显示OpenInvoiceWindow和CanExecuteOpenInvoiceWindowCommand的代码吗? – Robaticus 2011-02-12 19:19:54
你提供的堆栈跟踪有什么异常? – 2011-02-13 05:20:05