0

我已经开始使用 mvvm-light 工具包,并且是 WPF 的新手。

我的问题是:我想创建一个应用程序,其中主窗口包含一个带有 2 列 1 col 命令的网格,并且 col2 将在按下每个命令时显示视图。我希望根据命令创建视图并从它自己的视图中获取。

我试图弄清楚如何做到这一点,但没有成功。

我不知道如何使用 mvvm light 编写这种功能。

我只知道如何使用主视图创建主窗口,而另一个视图已在加载时创建。

请帮帮我。。

我正在使用 2008 WPF3.5

雪莉。今天让我开心..我刚刚开始这一周!!!

感谢你。我已经做到了,结果得到了当前 ViewModel“LU.ViewModel.AllChannelsViewModel”的 Tostring(),而不是真正的视图。

我要加载的视图是:我正在使用 mvvm-light

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="30" />
        <RowDefinition Height="30" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>

    <Button Grid.Row="0" Height="22" HorizontalAlignment="Right" Margin="8,4,0,0" Name="closebutton" VerticalAlignment="Top" Width="100" Command="{Binding CloseCommand}">Close</Button>
    <Button Grid.Row="1" Height="22" HorizontalAlignment="Left" Margin="8,4,0,0" Name="button1" VerticalAlignment="Top" Width="100" Command="{Binding GetChannelsCommand}">Load Channels</Button>
    <Button Grid.Row="1" Height="22" HorizontalAlignment="Right" Margin="8,4,0,0" Name="button2" VerticalAlignment="Top" Width="100" Command="{Binding NewChannelCommand}">New Channel</Button>
    <dg:DataGrid   Grid.Row="2"  ItemsSource="{Binding AllChannelsData}" Margin="0,30,0,0" />


</Grid>

我在这里想念什么?如何显示我想要的真实视图而不是视图模型的名称?

雪莉

4

2 回答 2

2

我不知道 MVVM Light 是否有任何特定的功能,但在 MVVM 中创建视图的常用方法是创建一个ContentControl绑定到 ViewModel 属性的视图。当您将新 ViewModel 影响到该属性时,将使用与 ViewModel 的 type 匹配的ContentControl来呈现它:DataTemplate

<!-- In resources -->
<DataTemplate DataType="{x:Type vm:FooViewModel}">
    <v:FooView />
</DataTemplate>

<DataTemplate DataType="{x:Type vm:BarViewModel}">
    <v:BarView />
</DataTemplate>
...

<!-- In the main view -->

<ContentControl Content="{Binding Current}" />
于 2010-06-13T12:22:11.203 回答
0

请原谅我为您提供了一个不在 MVVM Light 工具包中的选项,但我已经走在您的道路上并出于这个原因选择使用 Prism。我没有时间深入了解 Prism 或事件聚合器的详细信息,但在该工具中,您可以:

  1. 在您的视图模型中创建一个 ICommand,您可以将按钮或事件绑定到
  2. 您执行的命令将使用方法发布调用事件聚合器。这是您已经在 VM 之外设置并等待调用的事件。调用时,该事件会显示您的表单。您甚至可以将属性甚至其他 VM 传递给事件。这使您的 VM 不知道该视图。

最后,MVVM 对我来说非常棒,但它会给你带来很多这样的挑战。不要指望在一天之内征服它或快速创建应用程序,但是当你把所有东西都安排妥当时,它就是一个很好的范例。

于 2011-12-01T17:23:50.067 回答