【发布时间】:2020-10-21 08:02:27
【问题描述】:
我有一个位于 ParentView 中的 TabControl。在那个 TabControl 里面我有 ChildView,它包含一个按钮,该按钮带有绑定到 ParentViewModel 的 ICommand 的命令:
<Button Command="{Binding DataContext.MyCommand, RelativeSource={RelativeSource AncestorType={x:Type local:ParentView}}}"
CommandParameter="{Binding}">
实际上其中不少。有没有一种方法可以从该 RelativeSource 和 DataContext 创建 UserControl 资源,以便我可以像这样声明我的按钮?:
<Button Command="{Binding MyCommand, Source={StaticResource MyParentsDataContext}}"
CommandParameter="{Binding}">
编辑
到目前为止,我想出的是:
<UserControl.Resources>
<RelativeSource x:Key="Parent" AncestorType="{x:Type local:ParentView}" />
</UserControl.Resources>
<Button Command="{Binding DataContext.MyCommand, RelativeSource={StaticResource Parent}}"
CommandParameter="{Binding}">
略显枯燥且可读性更强,但仍不确定如何摆脱DataContext(如果可能的话)。
【问题讨论】:
-
为什么要将
Source设置为对象?您应该做的是将命令属性添加到子视图的DataContext并直接绑定到这个。或者坚持你目前的方法。 -
我的孩子视图没有特定的
DataContext。子代从父代继承DataContext。在我的情况下 Child 本身不是一个视图,child 也可以在 Parent 中声明。我只是想移动很多 xaml 来分隔 UserControl,这样 Parent 就更干净了。
标签: wpf xaml binding resources