gpt4 book ai didi

wpf - 是否保证在调用 OnStartup() 时所有 WPF 绑定(bind)都将起作用?

转载 作者:行者123 更新时间:2023-12-02 00:31:25 24 4
gpt4 key购买 nike

我正在开发一个将 WPF/C# 与 MVVM 结合使用的应用程序。我有一个特别的 ObservableCollection<>绑定(bind)到 ListBox .

场景1:当应用程序运行时,我修改这个ObservableCollection<>ListBox按预期填充。

场景 2:根据新要求,我必须默认用一些初始值填充此 ListBox。所以我在我的 ViewModel 中添加了一个初始化它的方法。我在初始化 View 和 ViewModel 后在 OnStartup() 中调用此方法。 DataContext 也设置正确。在这种情况下,值在 ObservableCollection<> 中更新,不幸的是它们没有反射(reflect)在 ListBox 中。

只是为了验证 OnStartup() 是否有任何问题,我在 View 的 ContentRendered 回调中添加了相同的方法调用,而不是 OnStartup(),它确实工作正常。

所以我的问题是,MVVM 何时能保证所有绑定(bind)都正确设置?

编辑:再观察一下,如果我弹出一条消息/对话框,ListBox 会按预期填充。它调用 ContentRendered 回调。然后它正确填充。

我几乎确信 ContentRendered 应该是保证绑定(bind)的函数。

最佳答案

我不能肯定地说这是你的问题,没有看到代码的变化,但听起来你现在的初始值可能是 null对于您要绑定(bind)的属性。

如果您随后将该属性设置为 ObservableCollection<T> , 没有自动更改通知。

一个选项是发出属性值更改的通知(从 null 变为某物),然后让 ObservableCollection<T>从那里处理更改通知。

更好的解决方案是用空的 ObservableCollection<T> 初始化属性从一开始,您对默认值的初始化将意味着添加这些值,并且更改通知应该如您所愿发生。

您可能会遇到同样的问题,方法是从非空集合开始,然后将属性设置为集合的新实例,而不引发通知,但我不能 100% 确定这一点。

如果这不是您的问题,那么我很乐意再看一眼。

关于wpf - 是否保证在调用 OnStartup() 时所有 WPF 绑定(bind)都将起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6604614/

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