質問

Messagetokensがenum である以下のように、以下のようにXAMLでコマンド・パラメーターをバインドしようとしています。

 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)
.

ETC。

RelayCommand<MessageTokensの代わりに、パラメータをRelayCommand<string>に変更した場合>コードは大丈夫です。

私は私のパラメータを強く入力することのすべての利点を失うので、これを行うことを嫌っています。

XAMLで列挙体を正しく宣言していないと思われる。私はを試しました

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

しかし、それはMVVMlightにInvalidCastExceptionを与えます。

誰もが提案をしていますか?

感謝の感謝 Jeremy

ソリューションで編集

問題は、+記号を使用してCommandParameterバインドの内部クラスを正しく参照していなかったためです。

正しいXAMLは次のものにする必要があります。

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

役に立ちましたか?

解決

この記事を調査する方法については、列挙国としての列挙値を説明する方法について説明します。 xaml のコマンドパラメータとして列挙値を渡す

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top