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"/>

¿Fue útil?

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 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top