WPF。在模板选择器中的控件之间绑定

时间:2013-04-22 08:35:35

标签: wpf data-binding avalondock

我在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示例的结构。

Sample here

1 个答案:

答案 0 :(得分:0)

使用这样的DataTemplate,您将只能在运行时绑定到DataContext设置的任何内容。您无法看到另一个控件的SelectedItem,并且您将无法使用ElementName绑定。

对于这类问题,确实没有直接的解决方案,您需要对数据模型进行长时间的努力。