wpf mvvm передача параметров между моделями представления с помощью команд - PullRequest
1 голос
/ 11 января 2011

Это моя первая попытка MVVM. Ядро моего приложения свободно основано на статье MSDN Джоша Смита. И я также использую легкие рамки mvvm.

У меня есть главное окно, содержащее область списка команд и область рабочей области, в которой пользовательские элементы управления отображаются в виде таблиц, каждый пользовательский элемент управления имеет соответствующую модель представления. В mainWindow также есть модель представления, содержащая мой список команд, а модели представления рабочей области имеют модель представления базовой рабочей области.

Мое представление по умолчанию имеет основную сетку данных MappingSets, которая может иметь один выбранный элемент. Команды запускают новые табличные элементы с представлениями, которые обрабатывают детали MappingSet на основе этого выбранного элемента. У меня есть View / ViewModel, который в зависимости от используемой команды должен возвращать либо tabitem для создания нового MappingSet без существующих данных, либо tabitem, содержащий подробности выбранного элемента для редактирования, или tabitem, содержащий подробности выбранного элемента база для нового MappingSet.

После установки сцены мне не удалось выяснить, является ли зависящий от команды способ передачи параметров, таких как идентификатор выбранного объекта MappingSet, для создания экземпляра моей модели представления в одном из трех состояний, упомянутых выше? Например, подойдет ли мессенджер mvvmlight для этой задачи?

Ответы [ 2 ]

1 голос
/ 11 января 2011

Это идеальный сценарий для мессенджера / эвентагрегатора.Однако ваша цепочка сообщений может быть немного запутанной.Насколько я понимаю, ваше главное окно содержит список команд (например, меню или ленты).Вот как я вижу цепочку событий.

  1. Вы выбираете MappingSet из сетки данных, это вызывает запуск сообщения MappingSetSelected (с полезной нагрузкой выбранного MappingSet)
  2. Главное окно прослушивает это сообщение и сохраняет выбранный в данный момент MappingSet
  3. Когда пользователь нажимает кнопку, запускается сообщение «EditMappingSet» или «CreateNewMappingSet» (или если окно отвечает за создание новых представлений, оносоздает их сам).
0 голосов
/ 11 января 2011

Если есть только три параметра, вы можете связать их с тремя различными командами, и внутри команд выполнить передачу вашей собственной переменной.

private RelayCommand _openMappingSetCommand;

//Command that one of your options is bound to
public ICommand ViewMappingSetOption1
    {
        get
        {
            if (_openMappingSetCommand == null)
            {
                _openMappingSetCommand = new RelayCommand(param => this.DoTabRequest("your parameter");
            }
            return _openMappingSetCommand ;
        }
    }


// Method that creates your viewmodel
private void DoTabRequest(parameterType parameter)
    {
        WorkspaceViewModel viewModel = null;

        if (viewModel == null)
        {
            viewModel = (WorkspaceViewModel)Activator.CreateInstance(typeof (viewModelType), parameter);
            this.Workspaces.Add(viewModel);
        }

        this.ActiveWorkspace = viewModel;
    }

Затем разрешите этот параметр в конструкторе вашей модели представления и сделайте все, что вам нужно, основываясь на этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...