是否保证在调用OnStartup()时所有WPF绑定都能正常工作?

时间:2011-07-07 00:37:24

标签: wpf data-binding mvvm

我正在开发一个使用WPF / C#和MVVM的应用程序。我有一个特定的ObservableCollection<>绑定到ListBox

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

场景2 :对于新要求,我必须默认使用一些初始值填充此ListBox。所以我添加了一个在ViewModel中初始化它的方法。在初始化View&amp;之后,我在OnStartup()中调用此方法。视图模型。 DataContext也正确设置。在这种情况下,值在ObservableCollection&lt;&gt;中更新,不幸的是它们没有反映在ListBox中。

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

所以我的问题,什么时候MVVM确保所有绑定都正确设置?

修改 还有一个观察,如果我弹出一个消息/对话框ListBox按预期填充。它调用ContentRendered回调。然后它填充正确。

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

1 个答案:

答案 0 :(得分:3)

我不能肯定地说这是你的问题,没有看到对代码的更改,但听起来你现在可能对你绑定的属性有一个初始值null

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

一种选择是提出属性值已更改的通知(从null更改为某些内容),然后让ObservableCollection<T>处理更改通知。

更好的解决方案是从一开始就用空ObservableCollection<T>初始化属性,然后初始化为默认值意味着添加这些值并且更改通知应该按照您的预期发生。

您可能会遇到同样的问题,从非空集合开始,然后将属性设置为集合的新实例,而不会发出通知,但我不是百分之百确定。

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