Pregunta

Estoy tratando de comprender MVVM. Entiendo mucho, pero tengo dificultades para comprender un aspecto: Configuración de contexto de datos .

Quiero mostrar una vista con un objeto en particular. El usuario no puede decidir qué es visible, por lo que necesito crear la vista en código. Entonces, quiero establecer el DataContext de la vista en un objeto (para el enlace). Estoy tratando de no poner código en la Vista para esto, pero View.LayoutRoot.DataContext no es público.

¿Qué me estoy perdiendo?

tratando de evitar esto:

public class View
{
    public View(object dataContext)
    {
        InitializeComponent();
        LayoutRoot.DataContext = dataContext;  
    }
}

con algo como esto:

public class ViewModel
{
    ...

    public UIElement GetView()
    {
        UIElement *element = new View();
        element.LayoutRoot.DataContext = element;
        return element;
    }
}
¿Fue útil?

Solución

No olvides que la Vista debe saber sobre ViewModel, y no al revés.

Entonces, en su caso, poner código en ViewModel para crear la vista no es la mejor manera de hacerlo.

Josh Smith artículo en MVVM tiene un sección sobre la aplicación de la Vista al ViewModel. Recomienda usar las plantillas de datos de WPF para seleccionar su vista en XAML.

Otros consejos

Si usa un control XAML o una ventana (que debería ser el caso si usa MVVM), LayoutRoot (Grid por defecto) es público. En su ejemplo, usa solo una clase simple para View, por lo que es difícil saber qué está pasando.

Además, secundo la opinión de Cameron, ni View ni ModelView deberían ocuparse de asignar DataContext. Se puede hacer de diferentes maneras (DataTemplate, inyección de dependencias, clase de generador especial, código simple), pero normalmente ocurre en el nivel de la aplicación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top