Ash*_*shu 5 wpf binding wpf-controls
我可以通过以下DataContext语法设置View Model和view之间的关系:
<UserControl.DataContext>
<view_model:MainMenuModel />
</UserControl.DataContext>
Run Code Online (Sandbox Code Playgroud)
我还可以通过以下DataTemplate语法设置View Model和view之间的关系:
<DataTemplate
DataType="{x:Type viewModel:UserViewModel}">
<view:UserView />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
两者有什么区别?第二个XAML是否未设置视图的数据上下文?
您的第二个XAML定义了一个可用于显示类型对象的模板viewModel:UserViewModel.它不会为任何设置数据,但如果ContentPresenter要求a 显示该类型的对象,它将使用您的模板.
您的第一个XAML正在设置DataContext控件的属性.它定义您在该范围内执行的任何绑定都将使用DataContext作为绑定的根(除非明确覆盖).对于一个简单的DataContext工作示例,比较这两个(都假设"s"是System命名空间):
<StackPanel>
<TextBlock Text="{Binding Day, Source={x:Static s:DateTime.Now}}" />
<TextBlock Text="{Binding Month, Source={x:Static s:DateTime.Now}}" />
<TextBlock Text="{Binding Year, Source={x:Static s:DateTime.Now}}" />
</StackPanel>
<StackPanel DataContext="{Binding Source={x:Static s:DateTime.Now}}">
<TextBlock Text="{Binding Day}" />
<TextBlock Text="{Binding Month}" />
<TextBlock Text="{Binding Year}" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
两者StackPanels都会呈现相同的效果,但第二种更容易重复使用.(例如:如果要显示不同的日期,则只需在一个地方更改绑定.)
| 归档时间: |
|
| 查看次数: |
2383 次 |
| 最近记录: |