我的 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 没有成功。
编辑:
终于解决了。正如 Dean Chalk 所说,按照我的策略,我的目标是不可能实现的。经过几次头痛后,我重构了我的数据模型。现在我有一个包含树视图和详细信息视图的视图模型。我遵循 AvalonDock 2.0 MVVM 示例的结构。