AvalonDock MVVM Якорное место - PullRequest
0 голосов
/ 08 мая 2019

В моем приложении MVFM WPF есть AvalonDock (версия 3.5).Привязка выглядит следующим образом:

    <xcad:DockingManager Name="_dockingManager" Grid.Row="1" 
DataContext="{Binding DockingManagerViewModel}"
                     DocumentsSource="{Binding Documents}"
                     AnchorablesSource="{Binding Anchorables}" > 

Так что, когда я добавляю новое Anchorable к соответствующей коллекции «Anchorables» в моей модели представления, появляется соответствующее представление.Тем не менее, представления всегда отображаются в правой части моего приложения.Как я могу контролировать, что представление прикреплено к левой стороне моего приложения через модель представления?

1 Ответ

0 голосов
/ 24 мая 2019

Я не думаю, что вы можете контролировать это в своей модели.

Есть 2 способа управления этим.

  1. Вы можете восстановить макет из ранее сохраненного (по умолчанию) макета всякий раз, когда приложение запускается в первый раз или

  2. Вы можете настроить XAML для использования исходного макета по своему усмотрению (предпочтительное решение)

Для второго варианта: Вы можете использовать привязку XAML в DockingManager классе для реализации ваших требований:

См. Пример TestApp для полной реализации приведенного ниже фрагмента (просто измените LeftSide на BottomSide, чтобы увидеть эффект):

<avalonDock:DockingManager Grid.Row="1">
...
    <avalonDock:LayoutRoot.LeftSide>
        <avalonDock:LayoutAnchorSide>
            <avalonDock:LayoutAnchorGroup>
                <avalonDock:LayoutAnchorable Title="AutoHide1 Content" ContentId="AutoHide1Content" IconSource="/AvalonDock.TestApp;component/Images/address-book--pencil.png" >
                    <TextBox Text="{Binding TestTimer, Mode=OneWay, StringFormat='AutoHide Attached to Timer ->\{0\}'}"/>
                </avalonDock:LayoutAnchorable>
                <avalonDock:LayoutAnchorable Title="AutoHide2 Content" ContentId="AutoHide2Content">
                    <StackPanel Orientation="Vertical">
                        <TextBox/>
                        <TextBox/>
                    </StackPanel>
                </avalonDock:LayoutAnchorable>
            </avalonDock:LayoutAnchorGroup>
        </avalonDock:LayoutAnchorSide>
    </avalonDock:LayoutRoot.LeftSide>
</avalonDock:LayoutRoot>
</avalonDock:DockingManager>
...