Domanda

Sto cercando di avvolgere la mia testa attorno a MVVM. Ne capisco molto, ma ho difficoltà a cogliere un aspetto: Impostazione di DataContext .

Voglio mostrare una vista con un oggetto particolare. L'utente non riesce a decidere cosa è visibile, quindi ho bisogno di creare la vista nel codice. Quindi, voglio impostare il DataContext della vista su un oggetto (per l'associazione). Sto cercando di non mettere il codice nella vista per questo, ma View.LayoutRoot.DataContext non è pubblico.

Cosa mi sto perdendo?

cercando di evitarlo:

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

con qualcosa del genere:

public class ViewModel
{
    ...

    public UIElement GetView()
    {
        UIElement *element = new View();
        element.LayoutRoot.DataContext = element;
        return element;
    }
}
È stato utile?

Soluzione

Non dimenticare che View dovrebbe conoscere ViewModel e non viceversa.

Quindi, nel tuo caso, inserire il codice nel ViewModel per creare la vista non è il modo migliore per aggirare.

L'articolo di Josh Smith su MVVM ha un sezione sull'applicazione della vista al ViewModel. Si consiglia di utilizzare i modelli di dati di WPF per selezionare la vista in XAML.

Altri suggerimenti

Se si utilizza un controllo XAML o Window (che dovrebbe essere il caso se si utilizza MVVM), LayoutRoot (Grid per impostazione predefinita) è pubblico. Nel tuo esempio, usi solo una semplice classe per View, quindi è difficile dire cosa sta succedendo.

Inoltre, secondo l'opinione di Cameron, né View né ModelView dovrebbero occuparsi dell'assegnazione di DataContext. Può essere fatto in diversi modi (DataTemplate, Iniezione delle dipendenze, Classe builder speciale, codice semplice) ma normalmente accade a livello di applicazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top