Próbuję zapisać kolekcję niestandardowych obiektów w Ustawieniach aplikacji.Rozwiązywanie problemów z kolekcją obiektów w Ustawieniach aplikacji
Z pomocą this related question, tutaj jest to, co aktualnie mam:
// implementing ApplicationSettingsBase so this shows up in the Settings designer's
// browse function
public class PeopleHolder : ApplicationSettingsBase
{
[UserScopedSetting()]
[SettingsSerializeAs(System.Configuration.SettingsSerializeAs.Xml)]
public ObservableCollection<Person> People { get; set; }
}
[Serializable]
public class Person
{
public String FirstName { get; set; }
}
public MainWindow()
{
InitializeComponent();
// AllPeople is always null, not persisting
if (Properties.Settings.Default.AllPeople == null)
{
Properties.Settings.Default.AllPeople = new PeopleHolder()
{
People = new ObservableCollection<Person>
{
new Person() { FirstName = "bob" },
new Person() { FirstName = "sue" },
new Person() { FirstName = "bill" }
}
};
Properties.Settings.Default.Save();
}
else
{
MessageBox.Show(Properties.Settings.Default.AllPeople.People.Count.ToString());
}
}
w projektancie Settings.settings dodałem właściwość typu PeopleHolder za pomocą przycisku przeglądarki i ustawić zakres na „Użytkownik”. Wydaje się, że metoda Save() zakończyła się pomyślnie, nie ma komunikatów o błędach, ale za każdym razem, gdy ponownie uruchamiam ustawienia aplikacji, nie są one zachowywane.
Chociaż nie jest pokazany w powyższym kodzie, jestem w stanie utrzymać ciągi Strings, po prostu nie mój zbiór niestandardowy (zauważyłem w innych podobnych pytaniach na SO może czasami być problem z numerami wersji, który zapobiega zapisywaniu ustawień podczas debugowania, więc Chcę wykluczyć, że jako ewentualny winowajca.)
Wszelkie pomysły? Jestem pewien, że jest bardzo prosty sposób na zrobienie tego, czego mi brakuje.
Dzięki za pomoc!
Dzięki za tak proste rozwiązanie. Działają doskonale dla mnie! – Seekeer
+1 - Działa jak urok. Dzięki. :) –
+1 Tak, to działa dla mnie w tej samej sytuacji. Ale może wymyśliłeś bardziej eleganckie rozwiązanie, które nie zawiera hakerskich ustawień.Designer.cs? – beduin