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에만 액세스했습니다. 나는 두 개의 뷰 모델을 포함하는 메인 뷰 모델을 가지고 있고, 그것들을 메인 뷰 모델로부터 인스턴스화했다. 그러나 SelectedItem 변경에 대해 "InfoControl"에 알리는 방법을 알 수 없습니다. – pete
당신의 명확한 설명을 해주셔서 감사합니다. ;) – pete