我正在尝试在 XAML 中为 RelayCommand <MessageTokens
> 绑定命令参数,如下所示,其中 MessageTokens 是一个枚举
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 代码崩溃
在 GalaSoft.MvvmLight.Command.RelayCommand`1.CanExecute(对象参数) 在 Telerik.Windows.Controls.RadMenuItem.CanExecuteApply() 在 c:\Builds\WPF_Scrum\HotFix_2010_Q3\Sources\Development\Controls\Navigation\Menu\RadMenuItem.cs:line 2105 在 Telerik.Windows.Controls.RadMenuItem.ChangeCommand(ICommand oldCommand, ICommand newCommand) 在 c:\Builds\WPF_Scrum\HotFix_2010_Q3\Sources\Development\Controls\Navigation\Menu\RadMenuItem.cs:line 2124 在 Telerik.Windows.Controls.RadMenuItem.OnCommandChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 在 c:\Builds\WPF_Scrum\HotFix_2010_Q3\Sources\Development\Controls\Navigation\Menu\RadMenuItem.cs:line 1623 在 System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e) 在 System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e) 在 System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs 参数) 在 System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex,DependencyProperty dp,PropertyMetadata 元数据,EffectiveValueEntry oldEntry,EffectiveValueEntry& newEntry,布尔 coerceWithDeferredReference,布尔 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"/>