У меня есть лист в который я могу добавить\удалить какой-то объект , как сделать чтобы на это событие сразу отреагировал ListBox?
Ответ
Надо привязать ListBox к коллекции
// #r "System.Windows.Forms"
using System.Windows.Forms;
using System.ComponentModel;
var bl = new BindingList
Если надо в ListBox выводить значение свойства, то в lb надо добавить ValueMember
var lb = new ListBox() {
DataSource = bl,
ValueMember = "тут имя свойства";
};
Если в ListBox надо выводить изменения свойств объектов, то в объектах надо реализовать интерфейс INotifyPropertyChanged
public class Data : INotifyPropertyChanged {
// требуется для уведомления о изменении значения свойств.
public event PropertyChangedEventHandler PropertyChanged = delegate {};
public int Id { get; internal set; }
public long Value {
get { return _Value; }
internal set {
if (_Value != value) {
_Value = value;
PropertyChanged(this, new PropertyChangedEventArgs("Value"));
}}}
long _Value = 0;
}
Работающий пример на c# тут
UPDATE
в лист добавляю число 1, а в лист бокс должна вывестись не единица, а "Число 1"
Проще всего сделать так
class Data {
public int Value { get; set; }
public string Text { get { return "Число " + this.Value; } }
}
var bl = new BindingList() {
new Data { Value = 1 }
};
var lb = new ListBox() {
Parent = f,
DataSource = bl,
ValueMember="Value",
DisplayMember="Text"
};
Комментариев нет:
Отправить комментарий