0

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

<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 中将它设置为不同的东西来更改 UserControl。但是,我认为这可能违反了 MVVM。既然您已经知道我要做什么,请推荐一种更好的方法(如果存在)。我只是想在应用程序中创建不同的视图,而不必产生更多的窗口等。

4

1 回答 1

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 的目的是将您的演示文稿与您的代码隔离开来,而不是将它们放在一起。

于 2013-03-20T20:41:50.897 回答