[英]WPF XAML: Difference between DataContext as attribute or property for XAML element?
我目前正开始使用XAML,并且对如何定义元素的DataContext有疑问。
我创建了一个包含带有以下标记的页面的视图:
<Page x:Class="View.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:ViewModel="clr-namespace:ViewModel"
mc:Ignorable="d"
Title="MainView">
...
</Page>
当我想给此页面一个供子元素使用的DataContext时,此方法有效:
<Page x:Class="View.MainView"
...
mc:Ignorable="d"
Title="MainView">
<Page.DataContext>
<ViewModel:MainViewModel />
</Page.DataContext>
...
</Page>
而且这不是:
<Page x:Class="View.MainView"
...
mc:Ignorable="d"
Title="MainView" DataContext="ViewModel:MainViewModel">
...
</Page>
对我来说,Page元素希望将DataSource定义为XAML属性而不是属性。 但是,Visual Studio中的IntelliSense为Page提供了DataContext属性,所以我想我在这里使用了错误的语法。 你能指出给我吗?
谢谢!
您可以使用该属性指定DataContext
,但应考虑如何实例化您的viewmodel。
以这种方式使用属性
<Page.DataContext>
<ViewModel:MainViewModel />
</Page.DataContext>
您告诉WPF实例化MainViewModel
并将创建的对象分配给Page
的DataContext
属性。
使用属性,您只需在这种情况下指定一个string
:
DataContext="ViewModel:MainViewModel"
但是您希望WPF为您创建一个实例。
因此,您可以使用Binding
或StaticResource
/ DynamicResource
将创建的实例分配给DataContext
属性:
DataContext="{Binding ViewModel}"
要么
<Page DataContext="{StaticResource ViewModel}">
<Page.Resources>
<ViewModel:MainViewModel x:Key = "ViewModel"/>
</Page.Resources>
</Page>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.