Domanda

Uso l'architettura MVVM per disaccoppiare la mia applicazione. Cioè, spesso vedi qualcosa come

var u = new UserControl();
u.Content = new MyCustomType(); // MyCustomType is not a control

L'interfaccia utente è definita tramite modelli di dati che risiedono nei dizionari delle risorse nei propri file XAML

<ResourceDictionary ...>
    <DataTemplate DataType="{x:Type local:MyCustomType}">
        ...

Carico le risorse all'avvio dell'applicazione e l'applicazione è felice di visualizzare la mia interfaccia utente. Ma se rimuovo un modello di dati e ne aggiungo uno nuovo (stessa chiave, stesso tipo di dati) l'interfaccia utente utilizza ancora il vecchio modello di dati. Ovviamente posso reimpostare il contenuto del mio contenitore per forzare un aggiornamento, ma questo sembra sciocco perché devo notificare ad ogni controllo una modifica, come questa

var tmp = control.Content;
control.Content = null;
control.Content = tmp; // New data template will be used

Qualche altro approccio?

È stato utile?

Soluzione

Questo perché le risorse sono statiche nel dizionario. Una volta utilizzati, non verranno aggiornati. Potresti provare a ricaricare i dizionari, ma questo aggiornerà solo i nuovi controlli, non quelli vecchi ..

Se desideri supportare più DataTemplates, puoi prendere in considerazione la classe DataTemplateSelector, che selezionerà un modello in base alle tue condizioni: http://msdn.microsoft.com/en- us / library / system.windows.controls.datatemplateselector.aspx

Se devi cambiare i modelli "al volo", puoi sempre considerare l'utilizzo di ControlTemplates e una proprietà Binding for Template del tuo controllo ...

{Binding Converter={StaticResource YourAwesomeTemplateSwitcherConverter}}

HTH

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