Имам контроли, които не актуализират съответните свойства на своя обвързан обект, докато фокусът не бъде изгубен. Има подобни въпроси с приети отговори, препращащи към 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, нищо не се променя. Някой има ли идеи?