gpt4 book ai didi

c# - WPF XAML : Difference between DataContext as attribute or property for XAML element?

转载 作者:太空宇宙 更新时间:2023-11-03 21:23:51 25 4
gpt4 key购买 nike

我目前正在开始使用 XAML,我有一个关于如何定义元素的 DataContext 的问题。

我创建了一个包含具有以下标记的页面的 View :

<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 属性,所以我想我只是在这里使用了错误的语法。你能给我指出来吗?

谢谢!

最佳答案

可以使用属性来指定DataContext,但您应该考虑如何实例化您的 View 模型。

以这种方式使用属性

<Page.DataContext>
<ViewModel:MainViewModel />
</Page.DataContext>

您告诉 WPF 实例化 MainViewModel 并将创建的对象分配给 PageDataContext 属性。

对于属性,在这种情况下您只需指定一个字符串:

DataContext="ViewModel:MainViewModel"

但是您希望 WPF 为您创建一个实例。

所以你可以使用例如BindingStaticResource/DynamicResource 将创建的实例分配给 DataContext 属性:

DataContext="{Binding ViewModel}"

<Page DataContext="{StaticResource ViewModel}">
<Page.Resources>
<ViewModel:MainViewModel x:Key = "ViewModel"/>
</Page.Resources>
</Page>

关于c# - WPF XAML : Difference between DataContext as attribute or property for XAML element?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28699461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com