C# Avalondock MVVM布局
所以这个问题是在之前还是之后被问过的 我知道如何在XAML中使用C# Avalondock MVVM布局,c#,wpf,mvvm,avalondock,xceed,C#,Wpf,Mvvm,Avalondock,Xceed,所以这个问题是在之前还是之后被问过的 我知道如何在XAML中使用layoutAcholablePaneGroup、layoutAcholablePane和LayoutDocument创建我想要实现的布局,但我想以MVVM的方式使用Avalondock,将我的XAML减少到: <avalonDock:DockingManager x:Name="dockingManager" DataContext="{Bind
layoutAcholablePaneGroup
、layoutAcholablePane
和LayoutDocument
创建我想要实现的布局,但我想以MVVM的方式使用Avalondock,将我的XAML减少到:
<avalonDock:DockingManager x:Name="dockingManager"
DataContext="{Binding DockManagerViewModel}"
DocumentsSource="{Binding Documents}"
AnchorablesSource="{Binding Anchorables}"
Loaded="dockingManager_Loaded"
Unloaded="dockingManager_Unloaded">
填充文档
和锚定文件
会使所需的窗口出现在dockingManager中,但我不知道如何将它们出现的位置保密
我如何指定一些规则(最好是在XAML中)来构建特定的布局,而不失去MVVM分离
例如:类型A的对象应全部位于右侧的layoutAcroblePane
中,类型B的对象应全部位于左侧的layoutAcroblePane
中,等等
提前谢谢。我也遇到过同样的情况。找到了一个棘手但对我有效的解决方案 遵循并实现了保存和加载布局 请注意,当应用程序第一次启动时,它没有布局,因此您需要使用所需的布局创建一个XML,稍后您可以加载保存的布局。希望这有帮助 对接管理器示例:
<xcad:DockingManager x:Name="DockingManagerDockView"
AnchorablesSource="{Binding AnchorableSource}"
DocumentsSource="{Binding DocumentSource}"
Utility:AvalonDockLayoutSerializer.SaveLayoutCommand="{Binding SaveLayoutCommandOnExit}"
Utility:AvalonDockLayoutSerializer.LoadLayoutCommand="{Binding LoadLayoutCommand}">
<xcad:DockingManager.Theme>
<xcad:MetroTheme />
</xcad:DockingManager.Theme>
<xcad:DockingManager.LayoutUpdateStrategy>
<Pane:LayoutInitializer/>
</xcad:DockingManager.LayoutUpdateStrategy>
<xcad:DockingManager.Resources>
<DataTemplate DataType="{x:Type ViewModels:ExplorerViewModel}">
<Views:ExplorerView />
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModels:TableOfContentViewModel}">
<Views:TableOfContentView x:Name="TOCView" Focusable="True">
<Views:TableOfContentView.InputBindings>
<KeyBinding Key="F5" Command="{Binding GridF5Command}"/>
</Views:TableOfContentView.InputBindings>
</Views:TableOfContentView>
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModels:PropertyViewModel}">
<Views:PropertyView />
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModels:SearchViewModel}">
<Views:SearchPanel />
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModels:DocumentViewModel}">
<Views:DocumentView />
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModels:ReIndexPanelViewModel}">
<Views:ReIndexPanel />
</DataTemplate>
</xcad:DockingManager.Resources>
<xcad:DockingManager.LayoutItemContainerStyleSelector>
<Pane:PanesStyleSelector>
<Pane:PanesStyleSelector.ToolStyle>
<Style TargetType="{x:Type xcad:LayoutAnchorableItem}">
<Setter Property="Title" Value="{Binding Model.Title}"/>
<Setter Property="Visibility" Value="{Binding Model.IsVisible, Mode=TwoWay, Converter={StaticResource BoolToVisibilityConverter}, ConverterParameter={x:Static Visibility.Hidden}}"/>
<Setter Property="ContentId" Value="{Binding Model.ContentId}"/>
<Setter Property="FlowDirection" Value="LeftToRight"/>
<Setter Property="UseLayoutRounding" Value="False"/>
<Setter Property="IconSource" Value="{Binding Model.IconSource}"/>
</Style>
</Pane:PanesStyleSelector.ToolStyle>
<Pane:PanesStyleSelector.FileStyle>
<Style TargetType="{x:Type xcad:LayoutItem}">
<Setter Property="Title" Value="{Binding Model.Title}"/>
<Setter Property="ToolTip" Value="{Binding Model.FilePath}"/>
<Setter Property="ContentId" Value="{Binding Model.ContentId}"/>
<Setter Property="CanClose" Value="False"/>
</Style>
</Pane:PanesStyleSelector.FileStyle>
</Pane:PanesStyleSelector>
</xcad:DockingManager.LayoutItemContainerStyleSelector>
<xcad:LayoutRoot>
<xcad:LayoutPanel Orientation="Horizontal">
<xcad:LayoutAnchorablePaneGroup>
<xcad:LayoutAnchorablePane Name="Explorer" DockMinWidth="250"/>
<xcad:LayoutAnchorablePane Name="TOC" DockMinWidth="500"/>
<xcad:LayoutAnchorablePane Name="Property" DockMinWidth="300" />
<xcad:LayoutAnchorablePane Name="Search" DockMinWidth="300" />
<xcad:LayoutAnchorablePane Name="ReIndex" DockMinHeight="300" />
</xcad:LayoutAnchorablePaneGroup>
<xcad:LayoutDocumentPaneGroup >
<xcad:LayoutDocumentPane/>
</xcad:LayoutDocumentPaneGroup>
</xcad:LayoutPanel>
</xcad:LayoutRoot>
</xcad:DockingManager>
这是一个相当广泛的问题,除了你引用的答案之外,还有很多答案,比如,或者是的,我已经看过了。链接1对于学习Avalondock MVVM的一般方法非常有用,但它不能回答我的问题(或者我不理解答案),而如果链接2仍然相关,我就不是舒尔。由于它不使用DataContext
、DocumentSource
或anchorablesoruce
,因此它可能是使较旧的Avalondock版本与MVVM兼容的关键。我希望有一种使用AvalonDock 2.0的更简单的方法。所以您遵循了CodePlex AvalonDock MVVM示例应用程序方法,并且您遇到了一些关于锚点的特定问题<代码>但我不知道如何将它们出现的位置保密-一个位置
到底意味着什么?您需要实现一些特定的初始布局吗?考虑让你的问题更具体一些。是的,我已经看到了,但是我有一个问题要解决这个问题:如果你添加了一个新的文档,你如何指定它应该在哪个文档窗格中创建?对不起,想要创建一个新的行,输入并添加注释:)好的,很好,我已经在答案中添加了我的停靠管理器是如何完成的。好的,解决方案中有一个单独的类,名为LayoutInitialize。该类说明了新文档的去向。当然。LAYOUTILIZER是您需要查看的工具。