我想要做的事情非常简单,但我可能会以错误的方式去做。我基本上想要一种方法来在同一个窗口中显示不同的视图。我现在可以使用的一个例子是:
<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。既然你已经知道我想要做什么,请推荐一种更好的方法,如果它存在的话。我只是想在应用程序中创建不同的视图,而不必产生更多的窗口等。
答案 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的目的是将您的演示文稿与代码隔离开来,所以不要将它们放在一起。