我有控件不更新其綁定對象的各自的屬性,直到焦點丟失。有類似的問題與被接受的答案相關,其中DataSourceUpdateMode.OnPropertyChange
被宣佈,我也這樣做,但行爲依然存在。這是一個示例實現。我會盡力做到徹底而簡潔。 MyConfig
類是通過我稱爲Configuration
的Singleton類中的屬性來訪問的。控制不立即更新綁定屬性與INotifyPropertyChanged
[Serializable]
public class MyConfig : INotifyPropertyChanged
{
public enum MyEnum
{
Foo,
Bar
}
public MyConfig()
{
MyProperty = MyEnum.Foo;
}
private MyEnum _MyProperty;
public MyEnum MyProperty
{
get { return _MyProperty; }
set { if (value != _MyProperty) { _MyProperty = value; OnPropertyChanged("MyProperty"); } }
}
[field: NonSerialized]
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (string.IsNullOrEmpty(propertyName))
throw new ArgumentNullException(propertyName);
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public partial class ConfigForm : Form
{
public ConfigForm()
{
InitializeComponent();
MyComboBox.Items.AddRange(Enum.GetNames(typeof(MyConfig.MyEnum)));
}
private void ConfigForm_Load(object sender, EventArgs e)
{
MyComboBox.DataSource = Enum.GetValues(typeof(MyConfig.MyEnum));
MyComboBox.DataBindings.Add("SelectedItem", Configuration.Instance.MyConfig, "MyProperty", false, DataSourceUpdateMode.OnPropertyChanged);
}
}
我不確定,鑑於下面的簡短實施,我可以忽略以確保立即改變財產。我可以在ComboBox中將Foo
更改爲Bar
,但除非從ComboBox中刪除焦點,否則不會更改。有沒有人有任何想法?
就像一個魅力。太感謝了!你已經教會了我一些關於定製現有控件的知識:) –
這是我發現的真正有效的唯一解決方案。謝謝。 –