0

我有一个完全惰性的单例和一个胜利表单,
我想将控件绑定到单例实例中的属性。
我有一个组合框,它有两种方式绑定到单例中的属性。
组合框有一个数据源(列表),当表单加载并且组合框带有一个选定的项目时,选定的项目在单例属性中没有更新。
例如,如果在加载时组合框有一个选择值“1”,则单例属性将不会获得该值并将保持为空,如果之后我将在组合框中选择一个不同的值,它将正确更新该属性。
有没有办法解决它?

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

1 回答 1

0

我认为你必须在你的类上实现INotifyPropertyChanged接口。

像这样(注意:检查序列化/反序列化是否仍然按预期工作):

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

}

于 2013-09-11T10:45:15.383 回答