如何在单个窗口中显示多个UserControl?

时间:2013-03-20 19:46:32

标签: c# wpf mvvm user-controls

我想要做的事情非常简单,但我可能会以错误的方式去做。我基本上想要一种方法来在同一个窗口中显示不同的视图。我现在可以使用的一个例子是:

<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>

通过上述内容,我现在可以通过在UserView中将其设置为不同的内容来更改UserControl。但是,我认为这可能会违反MVVM。既然你已经知道我想要做什么,请推荐一种更好的方法,如果它存在的话。我只是想在应用程序中创建不同的视图,而不必产生更多的窗口等。

1 个答案:

答案 0 :(得分: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的目的是将您的演示文稿与代码隔离开来,所以不要将它们放在一起。

相关问题