2013-03-20 79 views
0

我想要做的事很簡單,但我可能會以錯誤的方式去做。我基本上想要一種在同一個窗口內顯示不同視圖的方法。的我有什麼,現在作品的權利的一個例子是這樣的:如何在一個窗口內顯示多個UserControl?

<Window x:Class="MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="800" Width="800" 
     DataContext="{Binding Source={StaticResource Locator}, Path=MainPageViewModel}"> 
    <Grid> 
     <ContentPresenter Content="{Binding SelectedView}"/> 
    </Grid> 
</Window> 

通過上述,我現在就可以將其設置爲東西SelectedView不同的改變用戶控件。不過,我認爲這可能會違反MVVM。現在您已瞭解自己想要做什麼,請推薦一個更好的方法,如果存在的話。我只是試圖在應用程序內創建不同的視圖,而不必產生更多的窗口等。

+2

這幾乎是我如何做到這一點,這是mvvm的方式。 Selectedview將是實現INPC的基礎視圖模型類的派生類。我使用內容控件並創建多個數據模板,根據在selectedview中加載哪個視圖模型類型來更改顯示的用戶控件。我不做的一件事是綁定窗口的DataCointext。我重寫App.xaml.cs OnStartup並手動將DataContext分配給我的mainwindowviewmodel – failedprogramming 2013-03-20 20:02:12

回答

1

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的意義在於將演示文稿與代碼隔離,因此不要將它們放在一起。