Подтвердить что ты не робот

Передать параметр команды методу в 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 для кнопки.

4b9b3361

Ответ 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, чтобы явно объявлять источник привязки.