C# 数据绑定到静态属性(单例)
我有一个完全懒惰的单身汉和一个赢家,C# 数据绑定到静态属性(单例),c#,data-binding,static,combobox,C#,Data Binding,Static,Combobox,我有一个完全懒惰的单身汉和一个赢家, 我想将控件绑定到Singleton实例中的属性。 我有一个表单中的组合框,可以双向绑定到singleton中的属性。 组合框有一个数据源(列表),当表单加载并且组合框中有一个选定项时,选定项不会在singleton属性中更新。 例如,如果在加载时组合框有一个selecte值“1”,singleton属性将不会得到该值,并将保持为空,如果在此之后我将在组合框中选择一个difrent值,它将正确更新属性。 有没有办法解决这个问题 avilibaleLine
我想将控件绑定到Singleton实例中的属性。
我有一个表单中的组合框,可以双向绑定到singleton中的属性。
组合框有一个数据源(列表),当表单加载并且组合框中有一个选定项时,选定项不会在singleton属性中更新。
例如,如果在加载时组合框有一个selecte值“1”,singleton属性将不会得到该值,并将保持为空,如果在此之后我将在组合框中选择一个difrent值,它将正确更新属性。
有没有办法解决这个问题
avilibaleLinesComboBox.DataBindings.Add("SelectedItem", Settings.Instance,
"CallBackExtn", true, DataSourceUpdateMode.OnPropertyChanged);
[Serializable()]
public class Settings
{
private static volatile Settings instance;
private Settings() { }
public static Settings Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = loadSettingsFromFile();
}
}
return instance;
}
}
[System.Xml.Serialization.XmlElementAttribute("ConnectionString")]
public string ConnectionString { get; set; }
}
我认为你必须在你的类上实现这个接口 如下所示(注意:检查序列化/反序列化是否仍按预期工作):
}Maarten感谢您的answare,问题是组合框不会在加载表单时更新单例。例如,如果在加载时组合框有一个selecte值“1”,singleton属性将不会得到该值,并将保持为null,如果在此之后我将在组合框中选择一个difrent值,它将正确更新属性。
[Serializable()]
public class Settings : INotifyPropertyChanged {
private static volatile Settings instance;
private Settings() { }
public static Settings Instance {
get {
if (instance == null) {
lock (syncRoot) {
if (instance == null)
instance = loadSettingsFromFile();
}
}
return instance;
}
}
private string _connectionString;
[System.Xml.Serialization.XmlElementAttribute("ConnectionString")]
public string ConnectionString {
get { return _connectionString; }
set {
if (value != _connectionString) {
_connectionString = value;
OnPropertyChanged("ConnectionString");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName) {
var propertyChanged = PropertyChanged;
if (propertyChanged != null) {
propertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}