Passando um parâmetro para o ViewModel Constructor
-
26-09-2019 - |
Pergunta
É possível passar um parâmetro para o construtor de viewmodel? Eu usaria esse parâmetro para inicializar uma propriedade e/ou fazer outras operações no ViewModel.
Com Winforms que eu poderia fazer
public MyForm(MyParamType myParam) { MyFormProperty = myParam; //etc. }
Como faço para fazer algo semelhante no padrão MVVM / usando a luz MVVM?
Qualquer sugestão seria muito bem -vinda. Desde já, obrigado.
Solução
Eu recomendaria o uso de um contêiner do IOC e configurar seu contêiner para fornecer o parâmetro na construção.
Por exemplo, eis como é um código típico para um userControl para mim no WPF:
public partial class MyDataGridView : IMyListView
{
public MyDataGridView()
{
InitializeComponent();
}
public MyDataGridView(MyListViewModel viewModel)
{
InitializeComponent();
DataContext = viewModel;
}
}
O StructureMap cria o MyListViewModel para mim, porque, por padrão, ele procura o construtor mais ganancioso e, em seguida, fornece as dependências. Na minha configuração StructureMap, posso especificar que o MyListViewModel seja fornecido com os parâmetros necessários após a construção desse objeto.
Com um contêiner como o StructureMap, não preciso "novos" objetos para cima. Sempre.
Outras dicas
Se você estiver usando a luz MVVM (mesmo que você não seja, eu acho), poderá registrar um manipulador de mensagens no Mensageiro que pega os parâmetros do construtor (ou uma tupla) e atualiza a VM sempre que precisar "reconstruí -la".
Como todos os modelos de visualização são estáticos no localizador, você pode acessar essas propriedades já sem alterar um construtor.
Eu não entendo por que você não pode simplesmente criar o ViewModel. Você sempre pode criar seu próprio ViewModel. Se houver um modelo de exibição fornecido pelo MVVM Light, você sempre poderá herdar a partir desse e criar um construtor sobrecarregado.