Передать параметр команды методу в ViewModel в WPF?
Я пытаюсь передать 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;
}
}
Это мой meyhod в ViewModel
, который я хочу передать CommandParameter
. Я использую кнопку CommandParameter
для кнопки.
Ответы
Ответ 1
"ViewModel" подразумевает MVVM. Если вы делаете MVVM, вы не должны передавать представления в свои модели просмотра. Как правило, вы делаете что-то подобное в своем XAML:
<Button Content="Edit" Command="{Binding EditCommand}" CommandParameter="{Binding ViewModelItem}" >
И тогда это в вашей модели просмотра:
private ViewModelItemType _ViewModelItem;
public ViewModelItemType ViewModelItem
{
get
{
return this._ViewModelItem;
}
set
{
this._ViewModelItem = value;
RaisePropertyChanged(() => this.ViewModelItem);
}
}
public ICommand EditCommand { get { return new RelayCommand<ViewModelItemType>(OnEdit); } }
private void OnEdit(ViewModelItemType itemToEdit)
{
... do something here...
}
Очевидно, это просто для иллюстрации этой точки, если у вас было только одно свойство для редактирования с именем ViewModelItem, тогда вам не нужно было передавать его в качестве параметра команды.
Ответ 2
Если вы хотите передать элементы в viewmodel, вы можете использовать
CommandParameter="{Binding ElementName=ManualParcelScanScreen}"
Ответ 3
Просто используя синтаксис привязки данных. Например,
<Buttton x:Name="btn" Content="Click" Command="{Binding ClickCmd}" CommandParameter="{Binding ElementName=btn,Path=Content}" />
Мы можем не только использовать привязку данных, чтобы получить некоторые данные из View Models, но и передать данные обратно в View Models. В CommandParameter необходимо использовать ElementName, чтобы явно объявлять источник привязки.