【发布时间】:2014-01-09 14:27:55
【问题描述】:
我有一个带有 AvalonDock 的窗口。启动时会打开一个文档,其中填充有 LocControllers 用户控件 (LocControllersViewModel)。
现在我希望在双击 LocController 时 LocController 用户控件在新文档中打开。所以第一个文档始终是概览,填充了 LocController 用户控件,其他文档是双击后添加的。
我查看了 AvalonDock 和 MVVM 示例,但不知道如何获得我想要的行为。
到目前为止,我发现我必须使用 DocumentsSource 属性来绑定文档。所以我想我需要创建一个 DocumentViewModels 的集合来绑定到 DocumentsSource 属性。我需要用用户控件填充的 DocumentViewModel。第一个 Document 是 LocController 用户控件的列表,对于其他 Document 可以是其他用户控件。
谁能给我一个小代码示例?我不认为这很难,但我就是找不到:(
编辑:这是我当前的 DockingManager XAML:
<Window x:Class="AvalonDockMvvmTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:xcad="http://schemas.xceed.com/wpf/xaml/avalondock"
xmlns:AvalonDockMvvmTest="clr-namespace:AvalonDockMvvmTest"
Title="MainWindow"
Height="350"
Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Menu>
<MenuItem Header="File">
<MenuItem Header="NewDetail"
Command="{Binding NewCommand}" />
<MenuItem Header="OpenSelectDetail"
Command="{Binding OpenCommand}" />
</MenuItem>
</Menu>
<xcad:DockingManager x:Name="DockManager"
Margin="3 0 3 0"
DocumentsSource="{Binding Documents, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<xcad:DockingManager.LayoutItemTemplateSelector>
<AvalonDockMvvmTest:PanesTemplateSelector>
<AvalonDockMvvmTest:PanesTemplateSelector.OverViewTemplate>
<DataTemplate DataType="{x:Type AvalonDockMvvmTest:OverviewViewModel}"> <!-- Overview user control -->
</DataTemplate>
</AvalonDockMvvmTest:PanesTemplateSelector.OverViewTemplate>
<AvalonDockMvvmTest:PanesTemplateSelector.DetailTemplate>
<DataTemplate DataType="{x:Type AvalonDockMvvmTest:DetailViewModel}"> <!-- Detail user control -->
</DataTemplate>
</AvalonDockMvvmTest:PanesTemplateSelector.DetailTemplate>
</AvalonDockMvvmTest:PanesTemplateSelector>
</xcad:DockingManager.LayoutItemTemplateSelector>
</xcad:DockingManager>
</Grid>
</Window>
那么如何将不同的控件(概览和详细信息)加载到文档窗格中?
【问题讨论】:
-
我会尽量简化我的问题。我有几个不同的用户控件,如overviewControl、detailControl 等。现在我想在第一个DocumentTab 中启动时加载overviewControl。如果在overviewControl 中双击某个项目,则需要在新的DocumentTab 上打开detailControl。我怎样才能做到这一点?我想这不会那么难。
标签: c# wpf mvvm user-controls avalondock