Индивидуальные алгоритмы измерения / упорядочения для элементов управления, которые используют привязку данных в WPF - PullRequest
0 голосов
/ 07 апреля 2011

Я пишу алгоритм упорядочения / измерения для пользовательского редактора.Редактор использует пользовательские классы, производные от UserControl, в качестве элементов управления на холсте.Эти элементы управления являются данными, привязанными к различным свойствам / спискам в моих объектах модели данных.Измерение и расположение пользовательских элементов управления в значительной степени зависит от привязываемых данных (поскольку данные влияют на размер элементов управления), а также зависит от порядка, в котором элементы управления измеряются и располагаются.Из того, что я смог определить из документации WPF по MSDN, привязка данных фактически не выполняется до тех пор, пока после того, как элементы управления не будут измерены и упорядочены, и непосредственно перед тем, как элемент управления будет помечен как загруженный.Насколько я могу судить, это означает, что мне нужно подождать, пока все мои элементы управления будут загружены, прежде чем я смогу измерить и упорядочить свой собственный холст.В результате я вынужден установить флаги на холсте, чтобы определить, когда я могу и не могу его измерить / упорядочить, и использую эти флаги для принудительной отмены и перерисовки.Есть ли лучший способ для индивидуального измерения / расположения на холсте, о котором я просто не знаю?Есть ли способ принудительного раннего связывания данных в WPF?

Ответы [ 2 ]

0 голосов
/ 01 июня 2011

Мне пришлось обойти ограничение привязки данных, выполнив проверку в моих методах переопределения [Measure | Arrange], чтобы убедиться, что все элементы были загружены и что их ItemSources и DataContexts заполнены до фактического измерения и организацииуправления.Если кто-нибудь когда-нибудь найдет лучший способ сделать это, он может опубликовать это здесь?Это будет высоко ценится.

0 голосов
/ 07 апреля 2011

Если привязанные к данным свойства представляют собой настраиваемые свойства DependencyProperties, которыми вы управляете, вы можете установить свойства метаданных для DP, чтобы они указывали, что они AffectMeasure и AffectArrange.

Это скажет WPF перемерить и переставить, если значения этих DP меняются

Вы устанавливаете это при регистрации DP в FrameworkPropertyMetadata, смотрите здесь: http://msdn.microsoft.com/en-us/library/system.windows.frameworkpropertymetadata.aspx

...