一个简单的澄清点。我相信答案是“不”,但我想确定。
View是否适合了解模型?
正如我所说,我认为答案应该是“不”,但我发现很难设计一个简单的MVVM演示,而不需要了解该模型。
答案 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知道我的模型因为姓名和年龄