Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF MVVM和具有依赖属性的嵌套视图_C#_Wpf_Data Binding_Mvvm_Dependency Properties - Fatal编程技术网

C# WPF MVVM和具有依赖属性的嵌套视图

C# WPF MVVM和具有依赖属性的嵌套视图,c#,wpf,data-binding,mvvm,dependency-properties,C#,Wpf,Data Binding,Mvvm,Dependency Properties,我有一个在Xaml中定义子视图的父视图。子视图具有绑定到父视图的ViewModel的DependencyProperty。但是,子视图的ViewModel也需要该值 <custom:Parent> <custom:Child ChildId="{Binding ParentFooId}" ... /> </custom:Parent> ChildId作为ChildView控件的依赖属性实现。如果ChildViewModel需要ParentFooId,

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

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

ChildId
作为
ChildView
控件的依赖属性实现。如果
ChildViewModel
需要
ParentFooId
,那么获得它的正确MVVM方法是什么

我不想将
ChildView
DataContext
强制转换为
ChildViewModel
并在
ChildView
onchildicchanged
处理程序中设置值。对我来说,这似乎不太有意思

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


似乎我遗漏了一些明显的东西…

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

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

因此子视图模型将具有包含父视图模型的“父”属性…嗯。我想那会有用的…我想这可能是我明显遗漏的东西。