MVVM可能會也可能不會那樣。 MVVM將您的ViewModel設置爲您的代碼,然後創建一個資源庫來告訴視圖與視圖模型相關。你在做什麼只是一個約束力。如果你在'MainWindow'背後的代碼中做所有的代碼,這很不符合MVVM。
您也可以創建幾個視圖,然後顯示它們,我相信在不同的DOCKING PANELS中。在我開始使用MVVM之前,我只做了這個,而且我一次只顯示一個,但我認爲你可以更輕鬆地做得更多。
XAML:
<DockPanel x:Name="MainDock" LastChildFill="True">
<StackPanel DockPanel.Dock="Top">
<StackPanel.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0" />
<GradientStop Color="#FF759FCB" Offset="1" />
</LinearGradientBrush>
</StackPanel.Background>
<Menu Background="Transparent" >
<Menu.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1"/>
</ItemsPanelTemplate>
</Menu.ItemsPanel>
<MenuItem Grid.Column="0" x:Name="mnuBasic" Header="Basic Batch" Click="mnuBasic_Click" />
<MenuItem Grid.Column="1" x:Name="mnuImages" Header="Image List" Click="mnuFENSImages_Click" />
<MenuItem Grid.Column="2" x:Name="mnuReRender" Header="ReRender Batch" Click="mnuReRender_Click"/>
</Menu>
</StackPanel>
<DockPanel x:Name="dockcontent" DockPanel.Dock="Right" />
</DockPanel>
我將不得不稱之爲 '部分dockcontent' 填充的是與菜單項數據點擊。代碼背後填充對接代碼:
Exporter exp = new Exporter(); //constructor args if needed, this is a user control
dockcontent.Children.Clear(); // clear the dockpanel so nothing already exists
dockcontent.Children.Add(exp); // populate the dock with my user control
我想你可以用多種方法做到這一點,使多個圖像。只要您的對象是正確的上下文中的視圖,您就可以直接在XAML中執行綁定。
請記住,背後多餘的代碼基本上並沒有遵循MVVM。由於MVVM的意義在於將演示文稿與代碼隔離,因此不要將它們放在一起。
這幾乎是我如何做到這一點,這是mvvm的方式。 Selectedview將是實現INPC的基礎視圖模型類的派生類。我使用內容控件並創建多個數據模板,根據在selectedview中加載哪個視圖模型類型來更改顯示的用戶控件。我不做的一件事是綁定窗口的DataCointext。我重寫App.xaml.cs OnStartup並手動將DataContext分配給我的mainwindowviewmodel – failedprogramming 2013-03-20 20:02:12