C# 在AvalonDock 2.0中绑定集合中LayoutDocument的标题
我将ObservableCollection绑定到AvalonDock 2.0,其中集合中的每个项目都是AvalonDock文档。我是这样做绑定的:C# 在AvalonDock 2.0中绑定集合中LayoutDocument的标题,c#,wpf,mvvm,avalondock,C#,Wpf,Mvvm,Avalondock,我将ObservableCollection绑定到AvalonDock 2.0,其中集合中的每个项目都是AvalonDock文档。我是这样做绑定的: <ad:DockingManager DocumentsSource="{Binding Path=OpenProjects, Mode=TwoWay}" ActiveContent="{Binding Path=CurrentProject, Mode=TwoWay}" LayoutItemTemplateSelector="{Static
<ad:DockingManager DocumentsSource="{Binding Path=OpenProjects, Mode=TwoWay}" ActiveContent="{Binding Path=CurrentProject, Mode=TwoWay}" LayoutItemTemplateSelector="{StaticResource ProjectTemplateSelector}">
...
</ad:DockingManager>
如果我只打开了一个文档,这很好,但是当我打开多个文档时,它们都会显示当前项目的名称。例如,如果我有四个名为“A”、“B”、“C”和“D”的打开项目,如果我当前正在查看文档“C”,所有四个选项卡都将显示标题“C”,当我更改为文档“B”时,它们都将其名称更改为“B”
有没有办法防止这种变化?我已尝试将绑定模式设置为一次性,但似乎不起作用。这是因为您正在将标题文本绑定到通过停靠管理器的ActiveContent
引用的对象的属性。很明显,更改ActiveContent
(聚焦文档)会将所有LayoutDocument
视图的标题更新为相同的值,因为所有标题都绑定到相同的源
您可以尝试以下方法:
<ad:DockingManager.DocumentHeaderTemplate>
<DataTemplate>
<Border x:Name="Header">
<ad:AnchorablePaneTitle Model="{Binding Model, RelativeSource={RelativeSource TemplatedParent}}"/>
</Border>
</DataTemplate>
</ad:DockingManager.DocumentHeaderTemplate>
我最后做的事情就这么简单:
<ad:DockingManager.DocumentHeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Content.Name}" />
</DataTemplate>
</ad:DockingManager.DocumentHeaderTemplate>
说明:DocumentHeaderTemplate内绑定的DataContext是LayoutDocument本身。事实证明,它有一个名为Content的属性,它表示每个文档(在本例中是我的OpenProjects集合中的每个项目)中的解除绑定对象。在该对象中,我得到了属性名,这是我想要用作标题的字符串。虽然不是正确的答案,但这帮助我指向了正确的方向(请参见我自己发布的答案)。很好!作为对那些在这方面遇到困难的人的参考,可用的模板映射到以下含义:AnchorableTileTemplate
=(停靠)工具窗口,DocumentHeaderTemplate
=文档窗口/编辑器,DocumentPaneementEmHeaderTemplate
=选项卡标题右侧下拉菜单中的项目,DocumentTitleTemplate
=浮动文档窗口。
<ad:DockingManager.DocumentHeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Content.Name}" />
</DataTemplate>
</ad:DockingManager.DocumentHeaderTemplate>