【发布时间】:2012-01-13 14:08:25
【问题描述】:
我的控件在失去焦点之前不会更新其绑定对象的各自属性。有类似的问题,接受的答案引用 DataSourceUpdateMode.OnPropertyChange 被声明,我这样做了,但行为仍然存在。这是一个示例实现。我会尽量做到彻底,但简洁。 MyConfig 类是通过我称为 Configuration 的 Singleton 类中的属性访问的。
[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 中移除焦点,否则不会有任何变化。有人有什么想法吗?
【问题讨论】:
标签: c# winforms data-binding inotifypropertychanged