Silky Kansal Ответов: 2

C#, WPF, prism MVVM реализация составной команды в MVVM


Есть 2 различных представления, в которых я обрабатываю включение-выключение различных кнопок, одна из которых находится в контекстном меню, а другая-в панели ленты, контекстном меню и панели ленты присутствует n различных 2 представления. Включение и выключение этих кнопок основаны на той же операции, которая определена в модели представления. Для этой реализации я использую агрегатор событий для связи между моделями представлений этих представлений. Вместо этого метода я хочу использовать составную команду как я буду реализован с помощью составной команды

Что я уже пробовал:

Я реализовал его с помощью агрегатора событий

2 Ответов

Рейтинг:
1

Kenneth Haugland

Если вы знаете что искать это не должно быть так сложно:
DelegateCommand и CompositeCommand в Prism[^]


Рейтинг:
0

PureNsanity

В зависимости от того, как он используется, Вы можете объявить CompositeCommand как экспортированный класс. Затем каждая модель представления может импортировать CompositeCommand и зарегистрировать свою собственную команду.

[Export]
public class SaveWidgetsCompositeCommand : CompositeCommand { }

[Export]
public class FrontWidgetViewModel
{
    DelegateCommand FrontSaveCommand { get; set; }

    [ImportingConstructor]
    public FrontWidgetViewModel( SaveWidgetsCompositeCommand saveCommand)
    {
        saveCommand.RegisterCommand(FrontSaveCommand);
    }
}

[Export]
public class BackWidgetViewModel
{
    DelegateCommand BackSaveCommand { get; set; }

    [ImportingConstructor]
    public BackWidgetViewModel(SaveWidgetsCompositeCommand saveCommand)
    {
        saveCommand.RegisterCommand(BackSaveCommand);
    }
}


Если вы хотите сделать это с помощью CompositeCommand через представление, то CompositeCommand нужно будет объявить в представлении и зарегистрировать две команды из моделей представления при привязке/создании экземпляра.

Обратите внимание, что этот подход также может потребовать отмены регистрации команд модели представления, чтобы избежать утечек.