Nesnelerin bir koleksiyonunu kaydetme sorunu Uygulama Ayarları'na özel nesneler topluluğu depolamaya çalışıyorum. Ben tarayıcı düğmesi ile tip PeopleHolder özelliğini ekledi Settings.Settings Tasarımcısı'ndaUygulama Ayarları
// 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());
}
}
ve 'Kullanıcı' olarak kapsamını ayarlayın: Burada this related question bazı yardımıyla
, Şu anda ne var. Kaydet() yöntemi başarıyla tamamlanmış gibi görünüyor, hata iletileri yok, ancak uygulama ayarlarını her yeniden başlattığımda kalıcı değil.Yukarıdaki kodda gösterilmemesine rağmen, özel koleksiyonumu değil, yalnızca Strings'i kalıcı olarak kullanabiliyorum (Bende SO ile ilgili diğer sorularda farkettim, bazen hata ayıklama yaparken ayarları kaydetmeyi engelleyen sürüm numaralarıyla ilgili bir sorun olabilir) Olası suçlu olarak bunu dışlamak istiyorum.)
Herhangi bir fikrin var mı? Eminim bunu yapmak için çok basit bir yol var eminim :).
Yardımlarınız için teşekkürler!
Bu kadar basit bir çözüm için teşekkürler. Benim için mükemmel çalış! – Seekeer
+1 - Bir çekicilik gibi çalışır. Teşekkürler. :) –
+1 Evet, benim için de aynı durumda çalışıyor. Ama belki de setup.Designer.cs hacking içermeyen daha zarif bir çözüm buldunuz? – beduin