Em C #, como posso definir DataContext em um Vista do ViewModel?
-
20-08-2019 - |
Pergunta
I "m tentando envolver minha cabeça em torno de MVVM Eu entendo muito disso, mas eu estou tendo dificuldade em entender um aspecto:. Configuração DataContext
Eu quero mostrar uma visão com um objeto particular. O usuário não consegue decidir o que é visível, então eu preciso para criar a visualização no código. Então, eu quero definir o DataContext do fim de um objeto (por ligação). Eu estou tentando não colocar o código no modo de exibição para isso, mas View.LayoutRoot.DataContext não é público.
O que eu estou ausente?
tentando evitar isso:
public class View
{
public View(object dataContext)
{
InitializeComponent();
LayoutRoot.DataContext = dataContext;
}
}
com algo parecido com isto:
public class ViewModel
{
...
public UIElement GetView()
{
UIElement *element = new View();
element.LayoutRoot.DataContext = element;
return element;
}
}
Solução
Não se esqueça que a exibição deve saber sobre o ViewModel, e não o contrário.
Assim, no seu caso puting código no ViewModel para criar a vista não é a melhor maneira de contornar.
artigo de Josh Smith em MVVM tem um seção na aplicação do Vista para o ViewModel. Ele recomenda o uso DataTemplates do WPF para seleccionar a sua exibição em XAML.
Outras dicas
Se você usa um controle XAML ou janela (que deve ser o caso se você usar MVVM), LayoutRoot (Grid por padrão) é público. No seu exemplo, você usar apenas uma classe simples para Ver, por isso é difícil dizer o que está acontecendo.
Além disso, eu segunda opinião de Cameron - nem Ver ou ModelView deve lidar com a atribuição de DataContext. Isso pode ser feito de diferentes maneiras (DataTemplate, injeção de dependência, classe construtor especial, código simples), mas normalmente isso acontece no nível da aplicação.