2011-04-28 42 views
1

在MVVM環境中使用avalondock似乎相當具有挑戰性。只要我從shellview中分離DocumentPane,我就會丟失相應的datacontext,而且我的視圖是空的。重新連接時,恢復正常。avalondock mvvm

有沒有人有解決方案?

+0

請在AvalonDock文檔中查看[here](http://avalondock.codeplex.com/wikipage?title=AvalonDock%20Binding&referringTitle=Documentation)。 – 2011-05-04 10:55:00

+1

我寫了一篇文章,演示了將AvalonDock集成到MVVM應用程序的一種方式:http://www.codeproject.com/Articles/239342/AvalonDock-and-MVVM – 2012-04-17 22:46:31

回答

2

這是我目前使用的;我的app有兩個可停靠的窗格,每個窗格都有自己的viewmodel。這些視圖模型作爲主窗口視圖模型的屬性公開,這也是主窗口的DataContext。訣竅是使用靜態Application.Current實例的MainWindow.DataContext引用該數據上下文。

例如:

class MainWindowViewModel 
{ 
    public WindowAViewModel {get; set;} 
    public WindowBViewModel {get; set;} 
} 

    //this goes in App.xaml.cs, because my MainWindowViewModel has a constructor 
    //with arguments, else you could just set the Window.DataContext in xaml 
var window = new MainWindow(); 
window.DataContext = new MainWindowViewModel(...); 

主窗口的XAML:

<ad:DockingManager> 
    <ad:ResizingPanel Orientation="Horizontal" > 
    <ad:DockablePane> 
     <ad:DockableContent> 
     <l:WindowA DataContext="{Binding Path=MainWindow.DataContext.WindowAViewModel, 
           Source={x:Static app:App.Current}}"/> 
     </ad:DockableContent> 
     <ad:DockableContent> 
     <l:WindowB DataContext="{Binding Path=MainWindow.DataContext.WindowBViewModel, 
           Source={x:Static app:App.Current}}"/> 
     </ad:DockableContent> 
    </ad:DockablePane> 
    </ad:ResizingPanel> 
</ad:DockingManager> 

不知道如何工作了大型模塊化的應用程序,雖然,但我已經看到了棱鏡a sample application被帶沙發使用(一AvalonDock包裝),所以你可能想看看他們是如何做到的。