我正在尝试使用MVVMlight框架在winRT中创建一个程序。在应用程序中,我有一个应保持不变的部分,以及应将其内容链接到特定视图模型的部分。我将在下面举一个例子来说明我想说的话:
因此,当我按下灰色按钮时,内容应为灰色,当我按下红色按钮时,内容应为红色,但页面的其余部分应保持不变。
我现在想到的唯一方法就是在我的视图中放置多个数据窗口,并且只在我需要它们时填充它们所绑定的列表,并在填充时显示它们,并在清除时消失,但我认为这将使看起来有点乱,我想知道是否还有其他办法吗?
我真正想要实现的是当我点击一个按钮(灰色或红色)时,将会有一个带有相应视图模型的视图将被加载到内容区域中,内容区域正在击中红色/灰色的方块大气压。
应该是我在本教程中找到的东西,但对于WinRt,因为我无法让本教程在WinRt中工作。
http://www.codeproject.com/Articles/323187/MVVMLight-Using-Two-Views
答案 0 :(得分:2)
尝试这样的东西,一个带有内容控件的wpf窗口,该窗口绑定到视图模型上的usercontrol属性:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="MainWindow"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
DataContext="{Binding Main_VM, Source={StaticResource Locator}}"
Background="#FF1D1D1D"
WindowState="Maximized"
WindowStyle="None"
WindowStartupLocation="CenterScreen" ResizeMode="CanResizeWithGrip"
MinHeight="750" MinWidth="1050">
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" MinHeight="700" MinWidth="1000">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<ContentControl Name="UC_Main" Content="{Binding UC_Main}" Grid.Column="1" Grid.Row="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<!--workspace user control goes here-->
</ContentControl>
</Grid>
</Window>
您可以使用某些按钮或listview等更改usercontrol属性的值。以下是hte视图的viewmodel:
Public Class MainWindowViewModel
Inherits ViewModelBase
#Region "DECLARATIONS"
Public Const CC_Main As String = "UC_Main"
Private _ucMain As UserControl = Nothing
#End Region
#Region "PROPERTIES"
Public Property UC_Main() As UserControl
Get
Return _ucMain
End Get
Set(value As UserControl)
If _ucMain Is value Then
Return
End If
RaisePropertyChanging(CC_Main)
_ucMain = value
RaisePropertyChanged(CC_Main)
End Set
End Property
#End Region
#Region "COMMANDS"
#End Region
#Region "CONSTRUCTOR"
Public Sub New()
UC_Main = New YourUserControl
End Sub
#End Region
#Region "METHODS"
#End Region
End Class
显然这些都已经过简化,但应该告诉你什么是可能的。 YourUserCOntrol是您希望在主窗口的内容控件中显示的视图。然后,您可以在按钮或事件上使用mvvm-light relay命令将usercontrol更改/设置为新的。您可以根据需要在页面上设置尽可能多的内容控件。