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));
        }
    }