【发布时间】:2023-03-07 19:16:02
【问题描述】:
我正在学习 WPF 和 MVVM。我很好奇在特定情况下会发生什么。
假设我的视图模型实现了INotifyPropertyChanged,情况是我的代码已经构建了我的视图模型,然后将它分配给我的窗口的DataContext。
在我将视图模型分配给DataContext 的时间点,我的视图模型中的值可能与 XAML 元素中的值不同。所以我很好奇哪个值胜。
我假设 XAML 元素会从我的视图模型中提取所有值,但事实并非如此。对我的视图模型所做的更改会正确通知和更新 XAML 元素。但是在我设置 DataContext 之前所做的那些更改没有反映在 XAML 元素中。
谁能确认我的解释是正确的?我已经广泛搜索,但在这个特定问题上找不到任何东西。然而,这似乎是我的应用程序中的行为。非常感谢其他人的观点或更详细讨论的链接。
我很好奇我的视图模型实现INotifyPropertyChanged的情况,我的代码构建了我的视图模型,然后将它分配给我的窗口DataContext。
问题是,在我分配给DataContext 的那个阶段,XAML 元素中的值可能与我的视图模型不匹配。那么谁赢了。
根据我的测试,XAML 元素中已经存在的值似乎胜出。如果我想将它设置为我的视图模型中的值,我必须以某种方式设置它,或者让我的视图模型发送一个新的属性更改通知。
【问题讨论】:
-
你能发布一个例子,展示你的绑定吗?
-
设置绑定后,XAML 控件的属性如何保持任何值?没有
<TextBlock Text="{Binding MyProperty}" Text="My default value" />这样的东西 -
@HeySatan:有很多代码。需要考虑如何重写它以适合此处的形式进行演示。
-
@Jai:我没有在 XAML 中设置属性值。但它似乎设置为
null。当我附加我的数据上下文时,它似乎仍然设置为null,即使我的视图模型有数据。 -
一旦设置了 DataContext,就应该重新评估绑定。你能举一个不会发生这种情况的简单例子吗?