在MVVM中,View应该知道模型吗?

时间:2013-12-22 17:17:00

标签: design-patterns mvvm

一个简单的澄清点。我相信答案是“不”,但我想确定。

View是否适合了解模型?

正如我所说,我认为答案应该是“不”,但我发现很难设计一个简单的MVVM演示,而不需要了解该模型。

2 个答案:

答案 0 :(得分:2)

你是对的。答案是否定的。

[ View绑定到ViewModel上的属性,而ViewModel又公开了Model对象中包含的数据以及特定于视图的其他状态。 视图和ViewModel之间的绑定很容易构造,因为ViewModel对象被设置为视图的DataContext。 如果ViewModel中的属性值发生更改,则这些新值将通过数据绑定自动传播到视图。 例如,当用户单击View中的按钮时,ViewModel上的命令将执行以执行请求的操作。 ViewModel(从不是View)执行对模型数据所做的所有修改。 ] 这是一个有用的链接,您可以在此处获得以下解释的示例: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

答案 1 :(得分:0)

有时候View应该知道模型。当我使用DataTemplate。

<UserControl x:Class="WpfApp2.MyView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<StackPanel>
    <ListBox ItemsSource="{Binding Persons}" BorderBrush="Transparent" x:Name="mainListBox"
     Grid.IsSharedSizeScope="True"
     HorizontalContentAlignment="Stretch">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid Margin="4">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" SharedSizeGroup="Key" />
                        <ColumnDefinition Width="*" />
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="{Binding Name}" FontWeight="Bold"/>
                    <TextBox Text="{Binding Age}" Grid.Column="1"/>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

    <TextBox Text="{Binding ElementName = mainListBox, Path = SelectedItem.Age}"></TextBox>
</StackPanel>

如您所见,View知道我的模型因为姓名和年龄