Код: Выделить всё
var model = new MyModel();
var listBox = new System.Windows.Forms.ListBox();
listBox.DataBindings.Add("DataSource", model, nameof(model.Items));
listBox.DataBindings.Add("SelectedItem", model, nameof(model.SelectedItem));
// model.SelectedItem does _not_ update consistently, it may more may not work
// workaround
listBox.SelectedIndexChanged += (_, e) =>
{
model.SelectedItem = listBox.SelectedItem as MyData;
};
model.PropertyChanged += (_, e) =>
{
if (e.PropertyName == "SelectedItem")
listBox.SelectedItem = model.SelectedItem;
};
// further down the line...
var textBox = new System.Windows.Forms.TextBox();
model.PropertyChanged += (_, e) =>
{
switch (e.PropertyName)
{
case nameof(model.SelectedItem):
UpdateSelectedItemBindings();
// there are other dependencies on SelectedItem as well
break;
}
};
void UpdateSelectedItemBindings()
{
textBox.DataBindings.Clear();
if (model.SelectedItem != null)
{
// two-way binding works fine here
textBox.DataBindings.Add("Text", model.SelectedItem, nameof(model.SelectedItem.Name));
}
}
< /code>
// implementation for property change notification left out for brevity
public class MyModel : INotifyPropertyChanged
{
public BindingList Items { get; set; } = new(); // changed from ObservableCollection
public MyData SelectedItem { get; set; }
}
public class MyData : INotifyPropertyChanged
{
public string Name { get; set; }
}
< /code>
Как я могу реализовать свои модели для работы с привязкой данных Windows Forms с правильными уведомлениями об изменении? Трудно посмотреть, как это должно работать раньше, поскольку большинство примеров, которые я вижу, предназначены для более актуальных итераций форм окон и не работают так же, как и сейчас. (т.е. кажется, что текущие формы Windows выполняет ли значение поддержки INOTifyPropertyChanged Подробнее здесь: https://stackoverflow.com/questions/796 ... -in-winfor