WPF用户控件与父视图/视图模型的交互

WPF用户控件与父视图/视图模型的交互,wpf,user-controls,datacontext,Wpf,User Controls,Datacontext,嗨,我有一个mainView窗口,它的dataContext设置为自己的viewModel 在该viewModel上有一个DateTime属性,该属性反过来使用双向绑定绑定到我的主视图上的日期选择器 <toolkit:DatePicker DateSelected="{Binding mainDateTimeProperty, Mode=TwoWay}" /> 问题是,如何让usercontrol使用其viewmodel维护datacontext,但仍然将dependency属性绑

嗨,我有一个mainView窗口,它的dataContext设置为自己的viewModel

在该viewModel上有一个DateTime属性,该属性反过来使用双向绑定绑定到我的主视图上的日期选择器

<toolkit:DatePicker DateSelected="{Binding mainDateTimeProperty, Mode=TwoWay}" />
问题是,如何让usercontrol使用其viewmodel维护datacontext,但仍然将dependency属性绑定到主视图模型上的属性

希望这是清楚的。如果需要,可以发布更多代码。如果可能,寻找最佳实践方法

非常感谢您的建议。

试试看

<uc:MyNewUserControl DateProperty="{Binding Parent.DataContext.mainDateTimeProperty, Mode=TwoWay}" />

编辑: 抱歉,previos代码不正确。正确的绑定是

<uc:MyNewUserControl DateProperty="{Binding Path=Parent.DataContext.mainDateTimeProperty, RelativeSource={RelativeSource Self}, Mode=TwoWay} />

好的,谢谢。我试试看。另一方面,您认为使用依赖属性方法和绑定这样的方法是在这种父/子控件方法中做事情的正确方法吗?为什么不呢?若您想让xaml远离这样的绑定,若父视图模型已经有聚合的子视图模型,并且子视图模型引用了父视图,那个么您可以通过子视图模型公开父视图模型的属性。顺便说一下,在某些情况下,使用父属性获取对父视图的引用可能是不正确的,例如,如果您的子视图未直接放置到父视图中。如果是,请使用以下绑定:{binding Path=DataContext.mainDateTimeProperty,RelativeSource={RelativeSource Type=FindAncestor,AncestorType={x:Type uc:YourParentViewModelType}}
<uc:MyNewUserControl DateProperty="{Binding Path=Parent.DataContext.mainDateTimeProperty, RelativeSource={RelativeSource Self}, Mode=TwoWay} />