2015-08-24 23 views
1

我試圖將一些舊的AvalonDock概念分配給AD 2.0。我注意到DocumentContent被替換爲LayoutDocument。通過訪問LayoutDocumentPane表格可以通過.Children.add()輕鬆添加。但是,新窗體的創建在我的應用程序中進行了線程化處理(InitializeComponents需要一段時間),並且向對接系統添加文檔由調用執行。這導致一個InvalidOperation,我想它不能被修復,因爲它是WPF。我希望通過使用綁定來處理這個問題。從我的AD1代碼開始,我意識到所有屬性都在Content對象中。將Content.添加到綁定源將使我的文檔頭看起來像模板定義的。看到這裏我的XAML:AvalonDock 2.0中的內容綁定

<AD:DockingManager Name="dockManager" DocumentsSource="{Binding Documents}" > 
    <AD:DockingManager.DocumentHeaderTemplate> 
     <DataTemplate> 
     <StackPanel Orientation="Horizontal"> 
      <Image Source="{Binding Content.IconSource}" /> 
      <TextBlock Text="{Binding Content.Title}" /> 
     </StackPanel> 
     </DataTemplate> 
    </AD:DockingManager.DocumentHeaderTemplate> 
    <AD:LayoutRoot PropertyChanged="OnLayoutRootPropertyChanged"> 
     <AD:LayoutPanel Orientation="Horizontal" > 
      <AD:LayoutDocumentPaneGroup> 
       <AD:LayoutDocumentPane> 
       </AD:LayoutDocumentPane> 
      </AD:LayoutDocumentPaneGroup> 
      <AD:LayoutAnchorablePaneGroup DockWidth="300"> 
       <AD:LayoutAnchorablePane x:Name="rightPanel"> 
       </AD:LayoutAnchorablePane> 
      </AD:LayoutAnchorablePaneGroup> 
     </AD:LayoutPanel> 
    </AD:LayoutRoot> 
</AD:DockingManager> 

文檔定義:

public ObservableCollection<LayoutDocument> Documents { get; private set; } 

如果我現在添加一些新的形式Documents標題是正確的,但不顯示窗口內容。而不是打印窗口的類名稱。我認爲它與標題相似,並且缺少一些對.Content的引用,我在高層看到了一些.ToString()對象的結果。如何確定Content已分配給窗口內容?

如果我的方法有一些謬誤請告訴我。

回答

2

我想你需要一些resources添加到您的DockingManager顯示您查看對應ViewModel Instance

<AD:DockingManager.Resources> 
    <DataTemplate DataType="{x:Type ViewModels:ViewModel1}">// your ViewModel Name comes here. 
       <Views:View1 DataContext="{Binding}" /> // your View Comes here. DataContext is not required if you specify it on the UserControl.  
    </DataTemplate> 
<DataTemplate DataType="{x:Type ViewModels:ViewModel2}"> 
       <Views:View2 DataContext="{Binding}" />  
    </DataTemplate> 
</AD:DockingManager.Resources> 

和你Documents collection應該有ViewModel實例

基於下面的評論編輯

<AD:DockingManager> 
    <AD:LayoutRoot> 
     <AD:LayoutPanel Orientation="Vertical"> 
       <AD:LayoutDocumentPaneGroup> 
        <AD:LayoutDocumentPane> 
         <!--Your View/UserControl goes here--> 
        </AD:LayoutDocumentPane> 
        <AD:LayoutDocumentPane> 
         <!--Your View/UserControl goes here--> 
        </AD:LayoutDocumentPane> 
       </AD:LayoutDocumentPaneGroup> 
      </AD:LayoutPanel> 
     </AD:LayoutRoot> 
    </AD:DockingManager> 
+0

謝謝。你可以請解釋或顯示一個例子什麼是'ViewModels:AdvancedSearchViewModel'和'Views'在這裏? (我對WPF來說比較新) – z3e

+0

如果'LayoutDocument'沒有'DataContext',這是如何工作的? – z3e

+0

好的,如果不存在,你不想添加'DataContext'。我猜你正在爲你的文檔使用'UserControls'作爲不同的視圖,並且每個'UserControl'都與一個'ViewModel'關聯。如果是這種情況,那麼創建你的'ViewModel'實例並添加到'Documents'集合中就行了。 –