Domanda

Sto cercando di associare il parametro di comando in XAML per un relycommand<MessageTokens> come di seguito, dove MessageTokens è un enum

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

Utilizzo del radgridView di Telerik Il codice si blocca 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)
.

ecc.

Se modifico il parametro su relaycommand<string> invece di relycommand<MessageTokens> il codice funziona bene.

Sono detestato per farlo da quando perdo tutti i vantaggi di digitare fortemente i miei parametri.

Sospetto che non sto dichiarando correttamente l'enum in XAML.Ho provato

  CommandParameter = "<fullpath>..MessageTokens.SupplierInvoice>"
.

Ma questo dà un'invalidcastexception in mvvvmlight.

Qualcuno ha qualche suggerimento?

Molte grazie Jeremy

.

Modificato con la soluzione

Il problema era perché non stavo facendo riferimento correttamente alla classe interna nel commandpameter vincolante con il segno +.

La corretta XAML dovrebbe essere:

<Controls1:RadMenuItem Command="{Binding SalesInvoiceViewModel.OpenInvoiceWindowCommand}" CommandParameter="{x:Static local:DebitInvoiceViewModelBase+MessageTokens.SalesInvoice}" Header="Raise a sales invoice"/>
.

È stato utile?

Soluzione

È possibile dare un'occhiata a questo post che spiega come passare un valore Enum come un comandoPaameter: Passando un valore Enum come parametro di comando da XAML .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top