У меня проблемы с привязкой данных в моем приложении WPF. Идет ситуация:WPF. Связывание между элементами управления в селекторе шаблонов
У меня есть два элемента управления: один с древовидной структурой и другие, с подробным просмотром элемента, выбранного в списке. Все работает (переплетается) со следующим кодом:
<avalonDock:LayoutAnchorablePaneGroup DockWidth="230" Orientation="Vertical">
<avalonDock:LayoutAnchorablePane Name="CTTreeLayout">
<avalonDock:LayoutAnchorable Title="CTs">
<treeControl:TreeViewUControl x:Name="TreeViewCTs">
</treeControl:TreeViewUControl>
</avalonDock:LayoutAnchorable>
</avalonDock:LayoutAnchorablePane>
<avalonDock:LayoutAnchorablePane Name="CTInfoLayout">
<avalonDock:LayoutAnchorable Title="Información">
<infoControl:EntityInfoUControl x:Name="InfoControl" SelectedItem="{Binding ElementName=TreeViewCTs, Path=CTViewModel.SelectedItem}">
</infoControl:EntityInfoUControl>
</avalonDock:LayoutAnchorable>
</avalonDock:LayoutAnchorablePane>
</avalonDock:LayoutAnchorablePaneGroup>
Выбранный элемент был зависимым свойством в управлении деталями.
Теперь я меняю стратегию компоновки с Avalondock (как вы могли видеть из тегов avalonDock в коде). Это подразумевает использование селекторов шаблонов. Макет работает правильно, но привязка нарушена. Вот фактический кусок кода, с каждым элементом управления в пределах их шаблона:
<avalonDock:DockingManager.LayoutItemTemplateSelector>
<layout:PanesTemplateSelector>
<layout:PanesTemplateSelector.CTToolTemplate>
<DataTemplate>
<treeControl:TreeViewUControl x:Name="TreeViewCTs"/>
</DataTemplate>
</layout:PanesTemplateSelector.CTToolTemplate>
<layout:PanesTemplateSelector.CTInfoToolTemplate>
<DataTemplate>
<infoControl:EntityInfoUControl x:Name="InfoControl" SelectedItem="{Binding CTViewModel.SelectedItem, ElementName=TreeViewCTs}"/>
</DataTemplate>
</layout:PanesTemplateSelector.CTInfoToolTemplate>
</layout:PanesTemplateSelector>
</avalonDock:DockingManager.LayoutItemTemplateSelector>
Как я могу обновить связывание снова работать? Я пробовал с FindAncestor без успеха.
EDIT:
Решенный в конце концов. Как сказал Дин Мел, моя цель была невозможна после моей стратегии. После нескольких головных болей я реорганизовал свою модель данных. Теперь у меня есть модель представления, которая включает в себя представление дерева и представление деталей. Я следую структуре образца AvalonDock 2.0 MVVM.
Вот что я подумал. На каждом DataTemplate я имею доступ только к их DataContext. У меня есть модель основного вида, которая содержит две модели представления, и я создаю их из основной модели представления. Но я не могу понять, как уведомить «InfoControl» об изменении в SelectedItem. – pete
Спасибо за ваше четкое объяснение, вы спасли меня от потери времени, пытаясь и пытались. ;) – pete