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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top