Какие интерфейсы должны быть реализованы для уведомления об изменении собственности в Winforms 4.0?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Какие интерфейсы должны быть реализованы для уведомления об изменении собственности в Winforms 4.0?

Сообщение Anonymous »

У меня есть приличный фон с WPF и более современными сценариями данных, но я работаю с проектом, который нацелен на Framework 4.8. /> Я пытаюсь привязать свою модель с Listbox и обнаружил, что не могу использовать ObservableCollection для DataSource и должен использовать supingList вместо (как объяснено здесь). Также попытка связать свойство SelectedItem , и оно не последовательно обновляет и не испортит другие зависимости в будущем. Он работал на текстовых полях, но обновление граничного свойства для SelectedItem не обновляется надлежащим образом. Вероятно, есть более подходящий интерфейс, который будет реализован.

Код: Выделить всё

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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»