русский
Germany.ruForen → Архив Досок→ Programmierung

Заморочка интересная с WPF binding

02.12.20 16:07
Заморочка интересная с WPF binding
 
  moose коренной житель

знаю, что всего там еще не перевидал, но все же достаточно много.

наверное, неправильный выбрал дезигн, но лучше расскажу по порядку.


делаю UserControl, в котором, кроме прочего есть несколько клавиш, которые нужно периодически конфигурировать. т.е. делать их видимыми/активными...

для этого решил добавить к контролу DependencyProperty типа некого объекта. в окне, в которое вставлен контрол, этому проперти присвоено значение Binding, объект, который лежит в DataContext, имеет соответствующий проперти и говорит периодически OnPropertyChanged ("blablabla");

наблюдаю картину, которую не ожидал увидеть, и не сразу понял, в чем дело.

в этом же контроле имеются и другие DependencyProperties, которые типа примитивов: строки, целые ... некоторые я использую просто чтобы "передать сообщение" контролу. само проперти у объекта DataContext просто всегда возвращает одно и то же значение, просто пишу OnPropertyChanged ("blablabla");, и в PropertyChangedCallback юзэрконтрола делаю что надо по этому событию.

но те, где проперти типа объект, ведут себя не как ожидал. их нужно действительно поменять, причем не что-то там у них внутри, а другой объект прислать, иначе по OnPropertyChanged ("blablabla") происходит считывание объекта из DataContext, но PropertyChangedCallback не вызывается! т.е., например, если ваш объект - это, например, List(string), вы его создали и OnPropertyChanged ("blablabla"), PropertyChangedCallback вызовется. затем допишете к этому списку еще строчечку и снова вызовете OnPropertyChanged ("blablabla") - уйдет как в болото, и даже круги не пойдут. "оно" уже имеет тот же самый объект, и делать ничего не хочет. т.е. вы должны слать новый объеат. например, брать ваш список и делать public List(string) superlist { get { return _superlist.ToList(); }}, и тогда оно сработает.


допускаю, что это только для меня оказалось новостью, а для остальных - "и дураку понятно", но я пару часов протупил, решил исповедоваться : (

 

Sprung zu