2013-04-22 5 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 без успеха.

EDIT:

Решенный в конце концов. Как сказал Дин Мел, моя цель была невозможна после моей стратегии. После нескольких головных болей я реорганизовал свою модель данных. Теперь у меня есть модель представления, которая включает в себя представление дерева и представление деталей. Я следую структуре образца AvalonDock 2.0 MVVM.

Sample here

ответ

0

Использование DataTemplate как это вы сможете только привязать к тому, что получает набор в качестве DataContext во время выполнения. У вас не будет видимости на SelectedItem другого элемента управления, и вы не сможете использовать привязки ElementName.

На самом деле нет такого простого решения проблемы, и вам придется долго и долго искать в своей модели данных.

+0

Вот что я подумал. На каждом DataTemplate я имею доступ только к их DataContext. У меня есть модель основного вида, которая содержит две модели представления, и я создаю их из основной модели представления. Но я не могу понять, как уведомить «InfoControl» об изменении в SelectedItem. – pete

+0

Спасибо за ваше четкое объяснение, вы спасли меня от потери времени, пытаясь и пытались. ;) – pete

Смежные вопросы