【问题标题】:WPF. Binding between controls in template selectorWPF。模板选择器中控件之间的绑定
【发布时间】:2015-08-17 15:57:16
【问题描述】:

我的 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

【问题讨论】:

    标签: wpf data-binding avalondock


    【解决方案1】:

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

    这类问题确实没有直接的解决方案,您需要仔细研究您的数据模型。

    【讨论】:

    • 我就是这么想的。在每个 DataTemplate 上,我只能访问他们的 DataContext。我有一个包含两个视图模型的主视图模型,我从主视图模型实例化它们。但我不知道如何通知“InfoControl”以了解 SelectedItem 的变化。
    • 感谢您的清晰解释,您让我免于浪费时间尝试和尝试。 ;)
    猜你喜欢
    • 2023-03-06
    • 2011-12-01
    • 2012-08-18
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    相关资源
    最近更新 更多