【发布时间】:2015-04-26 07:00:59
【问题描述】:
我目前正在开始使用 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 为我提供了页面的 DataContext 属性,所以我想我只是在这里使用了错误的语法。你能指出来吗?
谢谢!
【问题讨论】:
-
我在这里猜测,但第一个示例需要一个实例,而第二个似乎没有实例化一个。
-
View 后面的代码中没有任何内容。通过调试,我发现(工作的)示例调用了我的 ViewModel 类的无参数公共构造函数。
-
DataContext="ViewModel:MainViewModel"仅将字符串“ViewModel:MainViewModel”分配给 DataContext 属性。它不会(也不应该)创建 MainViewModel 类的实例。请参考 MSDN 上的XAML Syntax In Detail 文章。