【发布时间】:2012-01-31 11:48:37
【问题描述】:
我目前正在编写的应用程序使用 MVVM 和 ViewModel-first 模式。我有类似于以下内容的 XAML:
<ContentControl Content="{Binding FooViewModel.BarViewModel.View, Mode=OneWay}"/>
每个虚拟机都是DependencyObject。每个属性都是DependencyProperty。根据应用程序的状态,FooViewModel 的BarViewModel 属性的值可以改变,从而改变View 属性的值。不幸的是,发生这种情况时,新视图不会显示,而旧视图仍然存在。
这非常令人沮丧。我认为如果路径表达式的任何部分发生更改,绑定就会更新,但情况似乎并非如此。当我使用较浅的路径表达式(例如 FooViewModel.View)并更改了 FooViewModel 属性的值时,已更新了它所绑定的 ContentControl,但未在这种情况。
如果您的解决方案是我首先放弃 ViewModel,这不是一个选择,尽管我很感谢您的建议。我必须让它按原样工作。
澄清
这是一个关于数据绑定的问题,不是关于 MVVM 或如何实现它的问题。如果它可以帮助您思考问题,或者如果您对如何实现 MVVM 有不同的想法,您可以安全地忽略它的 MVVM 方面。这是一个大型的现有项目,其中 MVVM 设计模式无法更改。 (现在为时已晚。)
所以,话虽如此,要回答的正确问题如下:
给定一个绑定路径表达式,其中每个元素都是DependencyProperty,最终属性是绑定到 ContentControl 的视图,为什么路径中间的属性更改不会导致绑定更新?
【问题讨论】:
-
您应该发布您的 FooViewModel、BarViewModel 和 View。我认为你混淆了一些东西。
-
您可以使用容器来管理深层路径吗?换句话说,将 ContentControl 上的内容绑定到 View,然后将其包围在一个带有 DC 绑定到 BarViewModel 的网格中,并用一个带有 DC 绑定到 FooViewModel 的网格包围它。我还没有尝试过这种与依赖属性的绑定(因此它是评论而不是答案),但它可以工作。
-
我在尝试将 xaml 设置为我的 mvvm 上的内部类的路径时遇到了同样的问题。就像在我的 mvvm 中必须 RaisePropertyChange("MvvmClass.InnerClass.PropertyName") 这不起作用。