将命令参数传递给WPF中ViewModel中的方法?

我试图将CommandParameter传递给我的ViewModel的方法。 这该怎么做?

 private void Open(object sender) { if (sender==this.objMainWindow.btnHistory) { objMainWindow.Container.Child = objHistory; } if (sender == this.objMainWindow.btnNew_Item) { objMainWindow.Container.Child = objNewItem; } if (sender == this.objMainWindow.btnSide_Effects) { objMainWindow.Container.Child = objSideEffect; } } 

这是我在ViewModel中想要传递CommandParameter meyhod。 我使用CommandParameter作为按钮。

“ViewModel”意味着MVVM。 如果您正在使用MVVM,则不应将视图传递到视图模型中。 通常,您在XAML中执行以下操作:

  

然后在你的视图模型中:

 private ViewModelItemType _ViewModelItem; public ViewModelItemType ViewModelItem { get { return this._ViewModelItem; } set { this._ViewModelItem = value; RaisePropertyChanged(() => this.ViewModelItem); } } public ICommand EditCommand { get { return new RelayCommand(OnEdit); } } private void OnEdit(ViewModelItemType itemToEdit) { ... do something here... } 

显然,这只是为了说明这一点,如果你只有一个属性要编辑,名为ViewModelItem,那么你就不需要将它作为命令参数传递。

如果您特别将元素传递给viewmodel您可以使用

  CommandParameter="{Binding ElementName=ManualParcelScanScreen}" 

只需使用数据绑定语法。 例如,

  

我们不仅可以使用数据绑定从View模型中获取一些数据,还可以将数据传递回View Models。 在CommandParameter中,必须使用ElementName显式声明绑定源。

我个人只是使​​用.Tag属性如下:

  

然后为了得到整个对象:

 private void Button_Click(object sender, RoutedEventArgs e) { var btn = sender as Button; var myViewModel = btn.Tag as MyViewModel; ... }