У меня есть элементы управления, которые не обновляют соответствующие свойства своего связанного объекта, пока фокус не будет потерян.Есть похожие вопросы с принятыми ответами, ссылающимися на объявленный DataSourceUpdateMode.OnPropertyChange
, который я делаю, но поведение сохраняется.Вот пример реализации.Я постараюсь быть тщательным, но кратким.Доступ к классу MyConfig
осуществляется через свойство в классе Singleton, который я называю Configuration
.
[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);
}
}
Я не уверен, учитывая следующую краткую реализацию, что я мог бы пропустить, чтобы гарантировать немедленное свойствоизменения.Я могу изменить, в этом случае от Foo
до Bar
в ComboBox, но если я не уберу фокус с ComboBox, ничего не изменится.У кого-нибудь есть идеи?