使用WinRT中的按钮将视图的一部分链接到另一个视图模型

时间:2013-03-11 12:54:29

标签: c# mvvm-light winrt-xaml

我正在尝试使用MVVMlight框架在winRT中创建一个程序。在应用程序中,我有一个应保持不变的部分,以及应将其内容链接到特定视图模型的部分。我将在下面举一个例子来说明我想说的话:

enter image description here

因此,当我按下灰色按钮时,内容应为灰色,当我按下红色按钮时,内容应为红色,但页面的其余部分应保持不变。

我现在想到的唯一方法就是在我的视图中放置多个数据窗口,并且只在我需要它们时填充它们所绑定的列表,并在填充时显示它们,并在清除时消失,但我认为这将使看起来有点乱,我想知道是否还有其他办法吗?

我真正想要实现的是当我点击一个按钮(灰色或红色)时,将会有一个带有相应视图模型的视图将被加载到内容区域中,内容区域正在击中红色/灰色的方块大气压。

应该是我在本教程中找到的东西,但对于WinRt,因为​​我无法让本教程在WinRt中工作。

http://www.codeproject.com/Articles/323187/MVVMLight-Using-Two-Views

1 个答案:

答案 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更改/设置为新的。您可以根据需要在页面上设置尽可能多的内容控件。