c# - 从 AvalonDock 2.0 中的集合绑定(bind) LayoutDocument 的标题

标签 c# wpf mvvm avalondock

我将一个 ObservableCollection 绑定(bind)到 AvalonDock 2.0,其中集合中的每个项目都是一个 AvalonDock 文档。这就是我进行绑定(bind)的方式:

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

有什么办法可以防止这种变化吗?我尝试将绑定(bind)模式设置为 OneTime,但似乎不起作用。

最佳答案

我最后做的就是这么简单:

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

说明:DocumentHeaderTemplate 内部绑定(bind)的 DataContext 是 LayoutDocument 本身。原来它有一个名为 Content 的属性,它表示每个文档中的解除绑定(bind)对象(在本例中,是我的 OpenProjects 集合中的每个项目)。在那个对象中,我有属性名称,它是我想用于标题的字符串。

关于c# - 从 AvalonDock 2.0 中的集合绑定(bind) LayoutDocument 的标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27374580/

相关文章:

c# - AppDomain.Load() 的有趣错误

c# - WPF 窗口按钮(关闭、最大、最小、恢复)绑定(bind)到系统命令失败

c# - WPF 验证取决于必填/非必填字段

c# - 应用根路径

WPF 动态内容选项卡不适合替代 MDI 用户界面

c# - 我可以省略EventTrigger.Actions吗?

android - RecyclerView 中的 NetworkImageView 因回收而导致显示问题

wpf - 用户控件中同一 ViewModel 的两个 View

c# - 删除字典中的所有条目 c# WPF

c# - 如何编辑 resx 文件(资源键值)运行时 wpf c#