小编Joh*_*ara的帖子

如何将 ObservableCollection 绑定到 AvalonDock DocumentPaneGroup?

我需要在 AvalonDock 2.0 中加载一组项目作为文档。这些对象从一个抽象类继承,我想根据子类在文档中呈现一个框架。

这是我的 XAML:

<ad:DockingManager Background="Gray" DocumentsSource="{Binding Path=OpenProjects}" 
        ActiveContent="{Binding Path=CurrentProject, Mode=TwoWay}">
    <ad:DockingManager.DocumentHeaderTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=OpenProjects/Name}" />
        </DataTemplate>
    </ad:DockingManager.DocumentHeaderTemplate>
    <ad:DockingManager.LayoutItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.Resources>
                    <DataTemplate DataType="{x:Type vm:SubclassAViewModel}">
                        <Frame Source="Pages/SubclassAProject.xaml" />
                    </DataTemplate>
                    <DataTemplate DataType="{x:Type vm:SubclassBViewModel}">
                        <Frame Source="Pages/SubclassBProject.xaml" />
                    </DataTemplate>
                    <DataTemplate DataType="{x:Type vm:SubclassCViewModel}">
                        <Frame Source="Pages/SubclassCProject.xaml" />
                    </DataTemplate>
                </Grid.Resources>
            </Grid>
        </DataTemplate>
    </ad:DockingManager.LayoutItemTemplate>
    <ad:LayoutRoot>
        <ad:LayoutPanel>
            <ad:LayoutDocumentPaneGroup>
                <ad:LayoutDocumentPane>

                </ad:LayoutDocumentPane>
            </ad:LayoutDocumentPaneGroup>
        </ad:LayoutPanel>
    </ad:LayoutRoot>
</ad:DockingManager>
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经实现了显示与OpenProjects集合中项目一样多的文档,但我似乎无法在每个文档中显示任何内容。

另外,我不知道我ActiveContent是否正确使用:我想分配给CurrentProject当前活动文档上分配的 ViewModel。

感谢您的时间。

c# wpf binding mvvm avalondock

5
推荐指数
1
解决办法
541
查看次数

从AvalonDock 2.0中的集合绑定LayoutDocument的标题

我将ObservableCollection绑定到AvalonDock 2.0,其中集合中的每个项目都是AvalonDock Document.这是我如何进行绑定:

<ad:DockingManager DocumentsSource="{Binding Path=OpenProjects, Mode=TwoWay}" ActiveContent="{Binding Path=CurrentProject, Mode=TwoWay}" LayoutItemTemplateSelector="{StaticResource ProjectTemplateSelector}">
...
</ad:DockingManager>
Run Code Online (Sandbox Code Playgroud)

问题是我想要显示每个项目的名称(在属性Name中指定CurrentProject)作为文档标题.这就是我尝试过的:

<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>
Run Code Online (Sandbox Code Playgroud)

如果我只打开一个文档,这可以正常工作,但是当我有几个文档时,它们都会显示Name当前项目.例如,如果我有四个打开的项目,名称为"A","B","C"和"D",如果我当前正在查看文档"C",则所有四个选项卡都将显示标题"C" ",当我改为文件"B"时,他们都将名字改为"B".

有没有办法阻止这种变化?我已经尝试将绑定模式设置为OneTime,但它似乎不起作用.

c# wpf mvvm avalondock

4
推荐指数
1
解决办法
2971
查看次数

标签 统计

avalondock ×2

c# ×2

mvvm ×2

wpf ×2

binding ×1