我在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示例的结构。
答案 0 :(得分:0)
使用这样的DataTemplate
,您将只能在运行时绑定到DataContext
设置的任何内容。您无法看到另一个控件的SelectedItem
,并且您将无法使用ElementName
绑定。
对于这类问题,确实没有直接的解决方案,您需要对数据模型进行长时间的努力。