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