.net upgrade 3.5后的view.datacontext更改 - > 4.61

时间:2016-09-01 13:55:22

标签: c# .net wpf mvvm

我目前正在尝试升级现有的WPF应用程序。 它主要使用代码隐藏,但它们逐渐转换为MVVM模式。 到目前为止,他们已经通过以下构造在代码中实现了MVVM:

//code located in codebehind of the ParentView var childViewModel = new ChildViewModel(); childViewModel.Initialize(BusyWatcher); var childView = new ChildView { DataContext = childViewModel}; ContentPresenterParent.Content = childView;

这对他们有用,他们可以通过使用例如

绑定到视图中的childViewModel属性
Text="{Binding ChildViewModelProp1}"

现在我们已将解决方案从.net 3.5升级到4.6.1(升级到4.0具有相同的行为)我们发现以下behvaviour。

虽然我们将childView上的datacontext设置为childViewModel,并且这似乎在单步执行代码时正确完成,但DataContext似乎重置为自身(childView)。这似乎是在不触发DataContextChangedEvent的情况下完成的。

通过查看Snoop以及输出窗口中我们收到以下错误就可以看出这一点: BindingExpression路径错误:' ChildViewModelProp1'在' object'上找不到的属性'' ChildView' (名称='')&#39 ;. BindingExpression:路径= ChildViewModelProp1;的DataItem =' ChildView'

什么可能导致DataContext被覆盖/重置?为什么通过从.net 3.5迁移到4.6.1(或4.0)来引入此行为?

此行为的解决方法可能是将xaml绑定到

Text="{Binding DataContext.ChildViewModelProp1}"

但这不是一个很好的解决方案。

1 个答案:

答案 0 :(得分:1)

问题在于ContentPresenter,当您设置DataContext时,它会将其更改回父控件的Parent DataContext。这里有更多关于这个问题。

这里可以找到更多问题。 https://alexfeinberg.wordpress.com/2014/10/11/wpf-the-real-difference-between-contentcontrol-and-contentpresenter/