Я не могу гарантировать, что эта проблема достаточно похожа, чтобы помочь, но я подумал, что, поскольку я не смог найти хороший ответ на свою проблему, я бы разместил здесь, так как это похоже, и я понял, как обойти мою проблему.
Я работаю с элементом управления Canvas, и у меня есть сложные элементы пользовательского интерфейса, размещенные на этом холсте, и элементы управления ItemsControl являются частью их определений пользовательского интерфейса XAML. Элементы ItemsControl определили набор DataTemplates в своих ItemTemplates.
Из-за этого некоторые аспекты моих объектов будут полностью сгенерированы только после обновления визуального дерева. Это не проблема перетаскивания элементов и работы с ними во время работы с холстом, потому что ItemContainerGenerator уже сгенерировал элементы, когда они мне нужны. Но это проблема при попытке регенерировать элементы из базы данных во время загрузки Canvas до того, как визуальное дерево отрисовывается.
Я обнаружил, что единственный реальный способ обойти эту проблему — начать работать над размещением «вторичных объектов» на холсте (объектов, которые связаны с объектами, созданными ItemContainerGenerators) только после того, как событие LayoutUpdated для холста был уволен.
public class DesignerCanvas : Canvas
{
public void LoadCanvasFromDB()
{
...
[loading items from the database, part one]
LayoutUpdated += DesignerCanvas_LayoutUpdated;
}
void DesignerCanvas_LayoutUpdated(object sender, EventArgs e)
{
LayoutUpdated -= DesignerCanvas_LayoutUpdated;
[loading items from the database which tie to UI elements from part one]
person
James Eby
schedule
06.04.2013