gpt4 book ai didi

mvvm - WPF : Setting DataContext of a UserControl with Binding not working in XAML

转载 作者:行者123 更新时间:2023-12-03 20:50:39 28 4
gpt4 key购买 nike

我正在尝试让我的第一个 WPF 应用程序使用 MVVM 工作,但遇到了一些绑定(bind)问题。

设置是我有一个 View 和 View 模型,其中包含用户详细信息(父级),为了保持简单,我将该 View 的一部分放入单独的 View 和 View 模型(子级)中。 subview 被定义为 UserControl。

我遇到的问题是如何设置 subview (UserControl)的 DataContext。我的父 ViewModel 有一个公开子 ViewModel 的属性,如下所示:

class ParentViewModel: INotifyPropertyChanged
{
public ChildViewModel childViewModel { get; set; }
//...
}

在我的父 View (它的 DataContext 设置为 ParentViewModel)的 XAML 中,我尝试将 subview 的 DataContext 设置如下:
<views:ChildView 
x:Name="ChildView"
DataContext="{Binding childViewModel}"/>

但是,这不起作用。 subview 的 DataContext 设置为与父 View (即 ParentViewModel)相同的 DataContext,就好像我根本没有设置它一样。我还尝试在 subview 本身中设置 DataContext,这也不起作用:
<UserControl x:Class="DietRecorder.Client.View.ChildView"
DataContext="childViewModel"

我找到了几种解决方法。在 subview 中,我可以通过在路径中包含 ChildViewModel 来绑定(bind)所有内容:
<SomeControl Visibility="{Binding Path=childViewModel.IsVisible}">

但我不希望 subview 对层次结构有这种程度的认识。在代码中设置 DataContext 也可以 - 但是,我必须在显示父 View 后执行此操作,否则当我调用 Show() 时 DataContext 会被覆盖:
parentView.Show();
parentView.ChildView.DataContext = parentViewModel.childViewModel;

这段代码也让我感到不安,因为违反了 LOD 等等。

这似乎只是 DataContext 的问题 - 我可以在 child 中绑定(bind)其他东西,例如我尝试将 FontSize 绑定(bind)到一个 int 属性只是为了测试它:
<views:ChildView 
x:Name="ChildView"
FontSize="{Binding Path=someVal}"/>

这很好用。

但我确信绑定(bind) DataContext 应该可以工作——我见过类似的例子。我在这里错过了什么明显的东西吗?有没有理由这不起作用?某处有拼写错误吗? (我为了你的利益重命名了一些东西,所以无论如何你都无法帮助我)。

欢迎任何想法。

编辑

再次查看此代码,我似乎在某处犯了错误,因为父 View 中的以下 XAML 现在似乎可以工作:
<views:ChildView 
x:Name="ChildView"
DataContext="{Binding childViewModel}"/>

我不知道为什么我不能让它最初工作,或者我可能为了让它工作而改变了什么。可能是答案之一所暗示的 INotifyPropertyChanged 问题。哦,好吧,向上和向上..

最佳答案

我怀疑这是因为 childViewModel 属性没有引发 PropertyChanged 事件。评估绑定(bind)时,此属性可能为 null(在这种情况下,DataContext 将回退到父级的属性)。稍后实例化 childViewModel 时,不会引发 PropertyChanged 事件,并且永远不会通知绑定(bind)现在有一个 DataContext。

尝试在 childViewModel 属性中引发 PropertyChanged 事件。

干杯,
洛朗

关于mvvm - WPF : Setting DataContext of a UserControl with Binding not working in XAML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2662007/

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