2

我有一个在 Xaml 中定义子视图的父视图。子视图有一个DependencyProperty绑定到父视图的 ViewModel。但是,子视图的 ViewModel 也需要该值。

<custom:Parent>
  <custom:Child ChildId="{Binding ParentFooId}" ... />
</custom:Parent>

ChildId被实现为ChildView控件的依赖属性。如果ChildViewModel需要ParentFooId,获取它的正确 MVVM 方式是什么?

我不想将DataContextChildView转换为 a并在 . 的处理程序中ChildViewModel设置值。对我来说,这似乎不是很 MVVM-ish。OnChildIdChangedChildView

我想到的另一种选择是ChildViewModel使用该值创建一个新的并将其设置为DataContext事件OnParentFooIdChanged中(在ParentViewModel)中;但这似乎也不完全正确,因为 ViewModel 应该对 View 不知情(因此对 s 一无所知DataContext)。

好像我错过了一些明显的东西......

4

2 回答 2

3

如果我正确理解了这个问题,您只需要在父视图模型中创建子视图模型,传递并保留对父视图模型的引用。这样,您可以从子视图模型中引用父视图模型的任何属性并绑定到子视图中的任何一个。

于 2009-11-05T23:14:32.213 回答
0

如果您只是想将数据从依赖属性传递到您的视图模型,我会使用 PropertyChangedCallback 事件。添加一个处理程序,将更改的数据发送到您的视图模型。不过,我可能误解了你的意图。

于 2009-11-05T14:19:06.827 回答