2013-04-22 97 views
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示例的结构。

Sample here

回答

0

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

对于这类问题,确实没有一个简单的解决方案,您需要在Data模型中查看很长时间并且很努力。

+0

这就是我的想法。在每个DataTemplate上,我只能访问它们的DataContext。我有一个包含两个视图模型的主视图模型,我从主视图模型中实例化它们。但我无法弄清楚如何通知“InfoControl”SelectedItem的变化。 – pete 2013-04-22 12:27:58

+0

感谢您的明确解释,您可以节省我的时间,努力尝试。 ;) – pete 2013-04-22 14:43:22