gpt4 book ai didi

c# - 在 XAML 中设置时访问代码中的 DataContext 实例

转载 作者:太空狗 更新时间:2023-10-29 18:31:23 30 4
gpt4 key购买 nike

我通常在代码隐藏中实例化我的 ViewModel,并将其设置为 Window 或 UserControl 的 DataContext。

对于这个简单的 ViewModel:

public class ViewModel
{
public ObservableCollection<string> items { get; set; }

public ViewModel()
{
items = new ObservableCollection<string>();
items.Add("FirstItem");
items.Add("SecondItem");
items.Add("ThirdItem");
}
}

我正在添加我的本地命名空间,下面的语法将正确设置:

<Window.DataContext>
<local:ViewModel/>
</Window.DataContext>

很好,我知道 ViewModel 对象已实例化并设置为窗口的 DataContext,它按预期工作,但有什么方法可以从代码访问实例化对象吗?

如果我在代码隐藏中创建对象

ViewModel vm = new VewModel();
this.DataContext = vm;

我能够访问 vm 实例,但使用 XAML 方法,如何才能访问它?

我创建了这个小示例,以了解是否有可用的简单答案。

最佳答案

当您设置任何元素的DataContext时,该元素的所有子元素也将具有相同的DataContext

想象一下场景:

<Window.DataContext>
<local:ViewModel/>
</Window.DataContext>

在这里,您已经为 Window 提供了一个 DataContext。现在,窗口中的所有子元素实际上都具有相同的 DataContext

<TextBox Text="{Binding MyProperty}" />

要在代码隐藏中获取 DataContext,您可以简单地引用元素的 DataContext

ViewModel vm = (ViewModel)this.DataContext;

上面的代码引用了 WindowDataContext

如果您需要更具体,并获取特定元素的DataContext,那么您可以简单地按名称引用该元素。

ViewModel vm = (ViewModel)elementName.DataContext;

除此之外,您永远不要在代码隐藏中设置DataContext。 MVVM 设计模式喜欢将事物分开,例如,如果您开始设置 UserControlDataContext,那么事情很快就会搞砸。

在 XAML 中设置 DataContext 是正确的方法。

关于c# - 在 XAML 中设置时访问代码中的 DataContext 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30975176/

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