我目前正在开始使用XAML,并且对于如何定义元素的DataContext有一个疑问。WPF XAML:DataContext作为XAML元素的属性还是属性之间的区别?
我创建了一个观点,即包括与以下标记的页面:
<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元素预期的数据源是定义为XAML属性而不是属性。但是,Visual Studio中的IntelliSense为我提供了一个DataContext属性,因此我想我只是在这里使用了一个错误的语法。你能指出这一点吗?
谢谢!
我猜在这里,但第一个例子需要一个实例,其中作为第二个不似乎实例化一个。 – 2015-02-24 15:20:56
我的代码在View中没有任何东西。通过调试,我发现(工作)示例调用ViewModel类的无参数公共构造函数。 – GeorgDangl 2015-02-24 15:25:18
'DataContext =“ViewModel:MainViewModel”只将字符串“ViewModel:MainViewModel”分配给DataContext属性。它没有(也不应该)创建一个MainViewModel类的实例。请参阅MSDN上的[XAML语法详细信息](https://msdn.microsoft.com/en-us/library/ms788723.aspx)文章。 – Clemens 2015-02-24 15:29:16