Persiste il controllo WPF nel file * .settings
-
06-07-2019 - |
Domanda
È possibile mantenere un controllo WPF o qualsiasi altro oggetto non banale in un file * .settings in un'applicazione .NET? Ho pensato che sarebbe stato facile dal momento che il file * .settings mi consente di specificare un tipo atrbitrario per ogni singola impostazione, purtroppo non sembra funzionare per me.
Quello che sto cercando di fare è di persistere un System.Windows.Controls.ListBox nel file * .settings della mia applicazione. Il problema è che la mia istanza di listbox non viene effettivamente salvata. Quando vado di nuovo ad eseguire la mia applicazione, è solo null quando vado a caricarla.
Ecco cosa sto usando per caricare / salvare la mia istanza ListBox
private void PersistListBoxToSettings(System.Windows.Controls.ListBox projectsListBox)
{
Properties.Settings.Default.ListBoxData = projectsListBox;
Properties.Settings.Default.Save();
}
private void LoadProjectListBox()
{
projectsListBox = Properties.Settings.Default.ListBoxData; // Always null after application restart.
}
Ho testato il mio file * .settings per assicurarmi che funzionasse anche salvando / caricando una semplice stringa, che funzionava come previsto.
Quello che sto cercando di fare è davvero una pessima idea? Devo smettere di cercare di essere intelligente e usare la serializzazione degli oggetti corretta su disco?
Soluzione
La mia convinzione è che gli oggetti che stai salvando in un file .settings debbano essere serializzabili, implementando ISerializable. Dubito che i controlli abbiano implementato questo. Questo link sembra confermare i miei pensieri:
Potresti essere in grado di creare un wrapper per salvarlo, implementare ISerializable e utilizzare [SettingsSerializeAs (SettingsSerializeAs.Binary)] come suggerimenti di collegamento per aggirare il problema.