在DataTemplate中找到视图模型DataContext

时间:2019-06-24 10:32:01

标签: c# wpf xaml

我有一个ContentControl和一个ContentTemplateSelector这样的

<Border>
    <ContentControl Content="{Binding MyObject}" ContentTemplateSelector="{Binding MyContentTemplateSelector"}/>
</Border>

在我的DataTemplate内,我想访问边界ICommand中定义的DataContext(ViewModel)

我已经尝试过FindAncestor模式,但是我怀疑它只能在DataTemplate内而不是整个VisualTree内运行。这是XAML中的DataTemplate代码:

<i:InvokeCommandAction Command="{Binding Path=DataContext.MyCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Border,AncestorLevel=2}}" 
                                                                        CommandParameter="{Binding }" />

关于如何将此命令绑定到ViewModel的DataContext的任何建议?谢谢!

1 个答案:

答案 0 :(得分:2)

在ContentControl中,您可以添加此属性:

Tag="{Binding DataContext, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"

然后在InvokeCommandAction中绑定到tag属性:

Command="{Binding Tag.MyCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContentControl}}"