В моем классе содержится много свойств, и мне нужно обрабатывать все свойства.Как получить уведомление при изменении свойства массива?
Смотрите это ниже:
public partial class my_form : Form
{
private Image[] _imagelist;
public Image[] imagelist
{
get
{
return _imagelist;
}
set
{
this._imagelist = value;
this.on_imagelist_changed();
}
}
private void on_imagelist_changed()
{
// do something.
}
private void button1_Click(object sender, EventArgs e)
{
/* set new imagelist */
this.imagelist = getimagelist();
}
}
Да, это отлично работает.
Но когда я называю это.
public partial class my_form
{
private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
{
int selectedIndex = this.listView1.SelectedItems[0].ImageIndex;
this.imagelist[selectedIndex] = dosomething(this.imagelist[selectedIndex]);
}
}
Это не звонок on_imagelist_changed()
. Зачем ?
Я не могу добавить свойство индексатором, как это. :(
public partial class my_form
{
public Image imagelist[int x]
{
get
{
return _imagelist[x];
}
set
{
this._imagelist[x] = value;
this.on_imagelist_changed();
}
}
}
Может кто-нибудь помочь мне решить эту проблему?
Могу ли я избегать, чтобы сделать класс управления, как этот C# Indexers?
Я основал несколько предложений, они сказали мне, пусть пытаются ObservableCollection. Я не понимаю об этом. Может быть кто-то для меня примером?
Просто использовать списки вместо массивов (список частного _imagelist; общественность статического списка ImageList). Причина, по которой вы не можете сделать this.imagelist [selectedIndex] = dosomething (this.imagelist [selectedIndex]); потому что массив не был инициализирован (поэтому я рекомендую использовать список вместо этого, все, что вам нужно сделать, это imagelist = new List (), чтобы его инициализировать) –
Innat3
@ Innat3 Массив был инициализирован, иначе код будет авария. Ошибка не является крахом, но факт, что событие не «стреляет». – dasblinkenlight