我試圖將一些舊的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
已分配給窗口內容?
如果我的方法有一些謬誤請告訴我。
謝謝。你可以請解釋或顯示一個例子什麼是'ViewModels:AdvancedSearchViewModel'和'Views'在這裏? (我對WPF來說比較新) – z3e
如果'LayoutDocument'沒有'DataContext',這是如何工作的? – z3e
好的,如果不存在,你不想添加'DataContext'。我猜你正在爲你的文檔使用'UserControls'作爲不同的視圖,並且每個'UserControl'都與一個'ViewModel'關聯。如果是這種情況,那麼創建你的'ViewModel'實例並添加到'Documents'集合中就行了。 –