2014-12-09 3 views
3

ObservableCollection을 AvalonDock 2.0에 바인딩합니다. AvalonDock 2.0에는 컬렉션의 모든 항목이 AvalonDock 문서입니다.AvalonDock 2.0의 컬렉션에서 LayoutDocument의 제목 바인딩

<ad:DockingManager DocumentsSource="{Binding Path=OpenProjects, Mode=TwoWay}" ActiveContent="{Binding Path=CurrentProject, Mode=TwoWay}" LayoutItemTemplateSelector="{StaticResource ProjectTemplateSelector}"> 
... 
</ad:DockingManager> 

문제는 그 문서 제목 등 (재산 CurrentProject에서 Name에 지정된) 각 항목의 이름을 표시 할 수 있습니다 : 이것은 내가 바인딩 할 방법이다. 이것은 내가 무엇을 시도했다입니다 :

<ad:DockingManager.DocumentHeaderTemplate> 
    <DataTemplate> 
     <TextBlock DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ad:DockingManager}, Path=ActiveContent, Mode=OneWay}" Text="{Binding Path=Name}" /> 
    </DataTemplate> 
</ad:DockingManager.DocumentHeaderTemplate> 

내가 하나 개의 문서 만 열려있는 경우는 잘 작동하지만 몇 가지있을 때, 그들은 모두 현재 프로젝트의 Name을 보여줍니다. 예를 들어 "A", "B", "C"및 "D"라는 이름의 네 개의 프로젝트가 열려있는 경우 현재 문서 "C"를보고 있으면 네 개의 탭 모두 제목이 "C" "문서"B "로 변경하면 이름이 모두"B "로 바뀝니다.

이 변경을 방지 할 수있는 방법이 있습니까? 바인딩 모드를 OneTime으로 설정하려고했지만 작동하지 않는 것 같습니다.

답변

11

LayoutDocument 자체. 그것이 각 문서 (이 경우, 내 OpenProjects 컬렉션 내부의 각 프로젝트) 안에 바인딩 개체를 나타내는 Content라는 이름의 속성을 가지고 있다고 밝혀졌습니다. 이 객체에는 제목에 사용할 문자열 인 Name이라는 속성이 있습니다.

+0

니스! 이러한 문제에 대한 참고 자료로 사용 가능한 템플릿은 다음과 같은 의미로 사용됩니다 :'AnchorableTitleTemplate' = (도킹 된) 도구 창,'DocumentHeaderTemplate' = 문서 창/편집기,'DocumentPaneMenuItemHeaderTemplate' = 오른쪽 드롭 다운 메뉴 항목 탭 헤더의'DocumentTitleTemplate' = 유동 문서 창. –

3

이것은 도킹 관리자의 ActiveContent을 통해 참조 된 개체의 속성에 제목 텍스트를 바인딩하기 때문입니다. ActiveContent (초점 문서)을 변경하면 모든 제목이 동일한 출처에 바인딩되어 있기 때문에 모든 LayoutDocument 개의 제목이 동일한 값으로 업데이트됩니다.

이 뭔가를 시도 할 수 :

<ad:DockingManager.DocumentHeaderTemplate> 
    <DataTemplate> 
     <TextBlock Text="{Binding Content.Name}" /> 
    </DataTemplate> 
</ad:DockingManager.DocumentHeaderTemplate> 

설명 :하여 DocumentHeaderTemplate 내부 바인딩 DataContext를가 인 나는이만큼 간단하고 결국 무엇

<ad:DockingManager.DocumentHeaderTemplate> 
    <DataTemplate> 
     <Border x:Name="Header"> 
      <ad:AnchorablePaneTitle Model="{Binding Model, RelativeSource={RelativeSource TemplatedParent}}"/> 
     </Border> 
    </DataTemplate> 
</ad:DockingManager.DocumentHeaderTemplate> 
+0

정답이 아니더라도 올바른 방향을 가리킬 수있었습니다 (직접 게시 한 답변 참조). –