Wpf 当窗口视图模型属性不是数据上下文时绑定到该属性

Wpf 当窗口视图模型属性不是数据上下文时绑定到该属性,wpf,data-binding,binding,mvvm,relativesource,Wpf,Data Binding,Binding,Mvvm,Relativesource,当前数据上下文是SomeViewModel,但我需要绑定到主窗口的视图模型上的属性。我猜我需要在绑定中指定Source或RelativeSource,但不太确定如何管理它。MainWindowViewModel是主窗口的数据上下文,也是公共成员。欢迎任何指导 试试类似的方法 {Binding Path=DataContext.YourMainWindowViewModelPropertyName, RelativeSource={RelativeSource Ancestor

当前数据上下文是SomeViewModel,但我需要绑定到主窗口的视图模型上的属性。我猜我需要在绑定中指定Source或RelativeSource,但不太确定如何管理它。MainWindowViewModel是主窗口的数据上下文,也是公共成员。欢迎任何指导

试试类似的方法

{Binding Path=DataContext.YourMainWindowViewModelPropertyName, 
         RelativeSource={RelativeSource AncestorType={x:Type Window}}}
如果您的主窗口是窗口类型的实例,而当前对象是sub-UserControl,则应该可以使用它

{Binding Path=DataContext.YourMainWindowViewModelPropertyName, 
         RelativeSource={RelativeSource AncestorType={x:Type Window}}}

如果您的主窗口是窗口类型的实例,而当前对象是sub-UserControl,那么它应该可以工作。

我认为您打破了MVVM的设计模式。您应该在SomeViewModel上具有该属性,并从两个视图模型中的同一位置获取该属性。或者,导航时将该值作为参数传递到视图。@Robaticus我曾考虑将该属性管道化到SomeViewModel,但我没有使用Dependency属性,因此当WindowViewModel上的属性更改时,我需要管理SomeViewModel上的RaiseProperty更改,这在WindowViewModel上并不明显,这很容易。我明白了。我还了解到,现实世界往往会干扰任何设计模式的完美实现我认为你打破了MVVM的设计模式。您应该在SomeViewModel上具有该属性,并从两个视图模型中的同一位置获取该属性。或者,导航时将该值作为参数传递到视图。@Robaticus我曾考虑将该属性管道化到SomeViewModel,但我没有使用Dependency属性,因此当WindowViewModel上的属性更改时,我需要管理SomeViewModel上的RaiseProperty更改,这在WindowViewModel上并不明显,这很容易。我明白了。我还了解到,现实世界往往会干扰任何设计模式的完美实现