使用简单的世界时钟程序让我遇到了如何在程序运行之间保留自定义 'public/css/vendor/font-awesome.min.css',
Bundle('public/css/app.styl',
- depends='/**/*.styl',
filters='stylus',
output='public/css/app.css'),
filters='cssmin',
个-
对象的问题。我可以成功保存其他设置类型,如字符串,双打和布尔值,但ObservableCollection
不会在程序会话之间保存。
不会抛出任何错误,调试器值似乎正在更新(Clock
计数增加),并且时钟会被添加到显示的列表中而没有任何问题。
这个question让我了解下面的代码结构。
Settings.Designer.cs - 手动创建
ObservableCollection
时钟类定义
Properties.Settings.Default.SavedClocks
主窗口已初始化
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public ObservableCollection<Clock> SavedClocks
{
get{
return ((ObservableCollection<Clock>)(this["SavedClocks"]));
}
set{
this["SavedClocks"] = value;
}
}
向可观察集合添加新时钟(从下拉列表中)
[Serializable]
public class Clock : INotifyPropertyChanged
{
public string m_LocationName { get; set; }
public TimeZoneInfo m_TimeZone { get; set; }
public Clock(){}
public Clock(TimeZoneInfo tz, string name)
{
m_TimeZone = tz;
m_LocationName = name;
}
//.... Other methods removed for brevity
}
XAML - 不要认为其中任何一个都有用,但这里是ListView我设置
的ItemSourcenamespace WorldClock
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
if (Properties.Settings.Default.SavedClocks == null)
{
Properties.Settings.Default.SavedClocks = new ObservableCollection<Clock>
{
//When list is empty, default with local clock
new Clock(System.TimeZoneInfo.Local, System.TimeZoneInfo.Local.StandardName)
};
Properties.Settings.Default.Save();
}
lvDataBinding.ItemsSource = Properties.Settings.Default.SavedClocks;
}
}
}
答案 0 :(得分:2)
尝试将SettingsSerializeAs
属性添加到Settings.Designer.cs的SavedClocks
属性中,以指定该集合应序列化为二进制数据:
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.SettingsSerializeAs(System.Configuration.SettingsSerializeAs.Binary)]
[global::System.Configuration.DefaultSettingValueAttribute(null)]
public ObservableCollection<Clock> SavedClocks
{
get
{
return ((ObservableCollection<Clock>)(this["SavedClocks"]));
}
set
{
this["SavedClocks"] = value;
}
}