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;
    }
}
Foi útil?

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.

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