Encuadernación de un enumeración a MVVM relackcommand comandarameter
-
12-11-2019 - |
Pregunta
Estoy tratando de unir el parámetro de comando en XAML para un relevoCommandGenederacodicEtOdeCode> como se muestra a continuación, donde MessageTokens es un enumer
public ICommand OpenInvoiceWindowCommand
{
get
{
return _openInvoiceWindowCommand ??
(_openInvoiceWindowCommand = new RelayCommand<MessageTokens>(OpenInvoiceWindow, prm => CanExecuteOpenInvoiceWindowCommand));
}
}
El XAML es:
<Controls1:RadMenuItem Command="{Binding SupplierInvoiceViewModel.OpenInvoiceWindowCommand}" CommandParameter="{Binding Source={x:Type ShipmentDetails:DebitInvoiceViewModelBase}, Path=MessageTokens.SupplierInvoice}" Header="Register a supplier's invoice"/>
Uso de RadgridView de Telerik El código se bloquea con
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)
etc.
Si cambio el parámetro al relevoCommandGenederacodicEtOdeCode> En lugar de releycommandgeneracodicodiclegcode> El código funciona bien.
Estoy enojado para hacer esto ya que pierdo todos los beneficios de escribir fuertemente mis parámetros.
Sospecho que no estoy declarando el Enum adecuadamente en XAML.Lo he intentado
CommandParameter = "<fullpath>..MessageTokens.SupplierInvoice>"
pero eso le da una excepción inválida en MVVMlight.
¿Alguien tiene alguna sugerencia?
muchas gracias Jeremy
editado con la solución
El problema fue porque no me refería correctamente a la clase interna en el encuadernación del comandoParameter con el signo +.
El XAML correcto debe ser:
<Controls1:RadMenuItem Command="{Binding SalesInvoiceViewModel.OpenInvoiceWindowCommand}" CommandParameter="{x:Static local:DebitInvoiceViewModelBase+MessageTokens.SalesInvoice}" Header="Raise a sales invoice"/>
Solución
Puede que se vea en este post que explica cómo aprobar un valor enumio como un comandoParameter: Pasando un valor enumio como parámetro de comando de XAML .