Передача параметра в конструктор ViewModel - PullRequest
4 голосов
/ 29 сентября 2010

Можно ли передать параметр конструктору ViewModel?Затем я использовал бы этот параметр, чтобы инициализировать свойство и / или выполнять другие операции в ViewModel.

С WinForms я мог бы сделать

public MyForm(MyParamType myParam) {
    MyFormProperty = myParam;
    //etc.
}

Как мне сделать что-то подобное вШаблон MVVM / использование MVVM Light?

Любые предложения будут приветствоваться.Заранее спасибо.

Ответы [ 4 ]

4 голосов
/ 29 сентября 2010

Я бы порекомендовал использовать контейнер IoC и настроить свой контейнер для предоставления параметра при создании.

Например, вот как выглядит типичный код для UserControl для меня в WPF:

public partial class MyDataGridView : IMyListView
{
    public MyDataGridView()
    {
      InitializeComponent();
    }

    public MyDataGridView(MyListViewModel viewModel)
    {
      InitializeComponent();

      DataContext = viewModel;
 }
}

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

С таким контейнером, как StructureMap, мне не нужно «создавать» новые объекты.Когда-либо.

3 голосов
/ 29 сентября 2010

Если вы используете MVVM light (даже если я не думаю), вы можете зарегистрировать обработчик сообщений в Messenger, который принимает параметры вашего конструктора (или их кортеж) и обновляет виртуальную машину всякий раз, когда вам нужно «восстановить" Это.

1 голос
/ 30 сентября 2010

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

0 голосов
/ 29 сентября 2010

Я не понимаю, почему вы не можете просто создать модель представления самостоятельно.Вы всегда можете создать свою собственную модель представления.Если MVVM Light предоставляет модель представления, вы всегда можете наследовать ее и создать перегруженный конструктор.

...