2014-01-09 3 views
2

저는 AvalonDock이있는 창을 가지고 있습니다. 시작할 때 LocControllers usercontrols (LocControllersViewModel)로 채워진 하나의 문서가 열립니다.WPF AvalonDock add Documents

이제 LocController usercontrol이 새 문서에서 열리는 LocController에 doubleclicked가있을 때 필요합니다. 첫 번째 문서는 항상 개요이며 LocController usercontrol로 채워져 있으며 두 번 클릭하면 다른 문서가 추가됩니다.

AvalonDock 및 MVVM 샘플을 살펴 보았지만 원하는 동작을 얻는 방법을 알 수 없습니다.

내가 지금까지 알아 낸 것은 문서를 바인딩하기 위해 DocumentsSource 속성을 사용해야한다는 것입니다. 그래서 DocumentSource 속성에 바인딩 할 DocumentViewModels 컬렉션을 만들어야한다고 생각합니다. 그 DocumentViewModel 내가 usercontrols로 작성해야합니다. 첫 번째 문서는 LocController usercontrols의 목록이고, 다른 문서의 경우 다른 usercontrol이 될 수 있습니다.

작은 코드 예제를 제공 할 수있는 사람이 있습니까? 나는 그것이 어려운 생각하지 않습니다,하지만 난 단지 그것을 발견 :(

편집 할 수 없습니다 : 여기에 내 현재 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> 

및 문서 창에 세부 사항)?

+0

나는 내 질문을 단순하게하려고 노력할 것이다. overviewControl, detailControl 등과 같은 몇 가지 다른 usercontrol이 있습니다. 이제 첫 번째 DocumentTab에서 시작시 overviewControl을로드하려고합니다. overviewControl에서 항목을 두 번 클릭하면 새 DocumentTab에서 detailControl을 열어야합니다. 이것을 어떻게 할 수 있습니까? 생각하기가 그렇게 힘들지는 않습니다. – PitAttack76

답변

5

좋아, 그것은 좀 시간이 걸렸습니다,하지만 난 결국 내가 원하는 방식으로 작업을 얻었다. AvalonDock MMVM 샘플에서 코드를 따기 와 CodeProject의 'AvalonDock [2.0] 튜토리얼'

결과 : 응용 프로그램이 개요가 첫 번째 문서 탭에로드됩니다. newdetail 메뉴 항목을 클릭하면 개요 탭 다음에 새 문서 탭이 추가됩니다. 개요 탭이 닫히지 않도록 설정되어 있습니다.

사이드 패널과 하단 패널을 추가하는 것과 같이 할 일이 더 있습니다. 그래서 아직 끝나지 않았지만, 지금까지 다른 패널을 만들 수 있다고 생각합니다.

스크린 샷 :

AvalonDock MVVM

enter image description here

XAML :

당신의 NewCommand의 정의의
<Window x:Class="AvalonDockMvvmTest.View.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:Pane="clr-namespace:AvalonDockMvvmTest.View.Pane" 
       xmlns:ViewModel="clr-namespace:AvalonDockMvvmTest.ViewModel" 
       Title="MainWindow" 
       Height="350" 
       Width="525"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <!-- Region Menu--> 
     <Menu> 
      <MenuItem Header="File"> 
       <MenuItem Header="NewDetail" 
            Command="{Binding NewCommand}" /> 
       <MenuItem Header="OpenSelectDetail" 
            Command="{Binding OpenCommand}" /> 
      </MenuItem> 
     </Menu> 
     <!-- EndRegion Menu--> 

     <!-- Region DockingManager --> 
     <xcad:DockingManager x:Name="DockManager" 
               Margin="3 0 3 0" 
               DocumentsSource="{Binding Files}" 
               Grid.Row="1"> 

      <xcad:DockingManager.LayoutItemTemplateSelector> 
       <Pane:PanesTemplateSelector> 
        <!-- Overview (startpage)--> 
        <Pane:PanesTemplateSelector.OverViewTemplate> 
         <DataTemplate DataType="{x:Type ViewModel:OverviewViewModel}"> 
          <!-- Add UserControl here--> 
          <TextBox Text="{Binding ContentText}"/> 
         </DataTemplate> 
        </Pane:PanesTemplateSelector.OverViewTemplate> 

        <!--Detail controls--> 
        <Pane:PanesTemplateSelector.DetailTemplate> 
         <DataTemplate DataType="{x:Type ViewModel:DetailViewModel}"> 
          <!-- Add UserControl here--> 
          <TextBox Text="{Binding ContentText}" /> 
         </DataTemplate> 
        </Pane:PanesTemplateSelector.DetailTemplate> 
       </Pane:PanesTemplateSelector> 
      </xcad:DockingManager.LayoutItemTemplateSelector> 

      <xcad:DockingManager.LayoutItemContainerStyleSelector> 
       <Pane:PanesStyleSelector> 
        <!-- Overview (startpage) style --> 
        <Pane:PanesStyleSelector.OverviewStyle> 
         <Style TargetType="{x:Type xcad:LayoutItem}"> 
          <Setter Property="Title" 
              Value="{Binding Model.Title}" /> 
          <Setter Property="ToolTip" 
              Value="{Binding Model.Title}" /> 
          <Setter Property="CloseCommand" 
              Value="{Binding Model.CloseCommand}" /> 
          <Setter Property="ContentId" 
              Value="{Binding Model.ContentId}" /> 
         </Style> 
        </Pane:PanesStyleSelector.OverviewStyle> 
        <!-- Detail style --> 
        <Pane:PanesStyleSelector.DetailStyle> 
         <Style TargetType="{x:Type xcad:LayoutItem}"> 
          <Setter Property="Title" 
              Value="{Binding Model.Title}" /> 
          <Setter Property="ToolTip" 
              Value="{Binding Model.Title}" /> 
          <Setter Property="ContentId" 
              Value="{Binding Model.ContentId}" /> 
         </Style> 
        </Pane:PanesStyleSelector.DetailStyle> 
       </Pane:PanesStyleSelector> 
      </xcad:DockingManager.LayoutItemContainerStyleSelector> 
     </xcad:DockingManager> 
     <!-- EndRegion DockingManager --> 
    </Grid> 
</Window> 
1

? 이 질문에 대한 대답은 주로 XAML을 어떻게 연결했는지가 아니라 해당 명령의 정의에 포함 된 내용에 주로 달려 있다고 생각했을 것입니다.