2
我在我的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试过但没有成功。
编辑:
终于解决了。正如Dean Chalk所说,我的目标是不可能遵循我的策略。 经过几次头痛后,我重构了我的数据模型。现在我有一个包含树视图和细节视图的视图模型。 我遵循AvalonDock 2.0 MVVM示例的结构。
这就是我的想法。在每个DataTemplate上,我只能访问它们的DataContext。我有一个包含两个视图模型的主视图模型,我从主视图模型中实例化它们。但我无法弄清楚如何通知“InfoControl”SelectedItem的变化。 – pete 2013-04-22 12:27:58
感谢您的明确解释,您可以节省我的时间,努力尝试。 ;) – pete 2013-04-22 14:43:22