Cambia modelli di dati in fase di esecuzione & # 8211; problema di aggiornamento
-
11-07-2019 - |
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?
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