Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在AvalonDock 2.0中绑定集合中LayoutDocument的标题_C#_Wpf_Mvvm_Avalondock - Fatal编程技术网

C# 在AvalonDock 2.0中绑定集合中LayoutDocument的标题

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

我将ObservableCollection绑定到AvalonDock 2.0,其中集合中的每个项目都是AvalonDock文档。我是这样做绑定的:

<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>