У меня есть приличный фон с 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
У меня есть приличный фон с WPF и более современными сценариями данных, но я работаю с проектом, который нацелен на Framework 4.8. /> Я пытаюсь привязать свою модель с Listbox и обнаружил, что не могу использовать ObservableCollection для DataSource и должен использовать supingList вместо (как объяснено здесь). Также попытка связать свойство SelectedItem , и оно не последовательно обновляет и не испортит другие зависимости в будущем. Он работал на текстовых полях, но обновление граничного свойства для SelectedItem не обновляется надлежащим образом. Вероятно, есть более подходящий интерфейс, который будет реализован.[code]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 [/code])
У меня есть приличный фон с WPF и более современными сценариями данных, но я работаю с проектом, который нацелен на Framework 4.8. /> Я пытаюсь привязать свою модель с Listbox и обнаружил, что не могу использовать ObservableCollection для DataSource...
Я знаю, что в интерфейсах Java можно определять статические методы, привязанные к самому интерфейсу. Однако я хотел бы определить подпись статического метода, который будет реализован классом, реализующим интерфейс. Это позволит использовать шаблон...
Я знаю, что в интерфейсах Java можно определять статические методы, привязанные к самому интерфейсу. Однако я хотел бы определить подпись статического метода, который будет реализован каждым классом, реализующим интерфейс. Это позволит использовать...
У нас есть некоторые проблемы с моим другом. Предположим, у нас есть класс, который реализует подключение к базе данных, например,:
class DB
{
public:
void Connect();
void Disconnect();
// ...
~DB();
};