2014-05-01 15 views
9

Sto tentando di utilizzare AvalonDock nella mia applicazione wpf che è un'applicazione MVVM. Guardando in giro non sono riuscito a trovare alcuna applicazione di esempio che mostra come posso farlo.Codice di esempio per mostrare come utilizzare Avalondock in un'applicazione MVVM

AlavonDock dice che ha il supporto nativo per MVVM, quindi dovrebbe essere facile supportare mvvm, ma non c'è codice di esempio.

Le mie domande sono:

  1. come scrivere XAML che ha una gestione dei documenti ed è rilegata a ViewModel?
  2. Come aggiungere un nuovo documento al pannello in questo scenario?
  3. Come posso ottenere informazioni sul layout da documentmanegr (se possibile).

risposta

10

c'è un App esempio nella Fonte CodePlex di AvalonDock - non è incluso nel download normale. Dovrai andare al numero Source Control page e fare clic su "Download".

Inoltre, ho scritto un'app di esempio, che è possibile utilizzare anche per iniziare, ho scritto un quick blog post describing it e put it on GitHub.

In sostanza, è possibile impostare il LayoutItemContainerStyle per colmare il divario tra la vista e il vostro ViewModel, ad esempio:

<Window ... 
    xmlns:dock="http://schemas.xceed.com/wpf/xaml/avalondock" 
    xmlns:dockctrl="clr-namespace:Xceed.Wpf.AvalonDock.Controls;assembly=Xceed.Wpf.AvalonDock" 
    > 
    ... 
    <dock:DockingManager DataContext="{Binding DockManagerViewModel}" 
         DocumentsSource="{Binding Documents}" > 

    <dock:DockingManager.LayoutItemContainerStyle> 
     <!-- you can add additional bindings from the layoutitem to the DockWindowViewModel --> 
     <Style TargetType="{x:Type dockctrl:LayoutItem}"> 
     <Setter Property="Title" Value="{Binding Model.Title}" /> 
     <Setter Property="CloseCommand" Value="{Binding Model.CloseCommand}" /> 
     <Setter Property="CanClose" Value="{Binding Model.CanClose}" /> 
     </Style> 
    </dock:DockingManager.LayoutItemContainerStyle> 

    </dock:DockingManager> 

</Window> 

In questo esempio, DockManagerViewModel ha una proprietà 'Documenti', con una raccolta di ViewModels che hanno una proprietà Title, CloseCommand e CanClose.

+0

Questo è un ottimo esempio ... utilizzando AvalonDock 2.0 con il paradigma di progettazione MVVM – aggietech