我在资源字典中定义了一个控件模板。
<Button Command="{Binding Path=DataContext.PrintCommand,
RelativeSource={RelativeSource
Mode=FindAncestor,AncestorType={x:Type UserControl}}}">
我正在使用相对源来获取数据上下文并访问viewmodel。
在PrintViewModel中
public ICommand PrintCommand { get; set; }
在Usercontrol中,我设置了datacontext = PrintViewModel
它为我工作。但这是不好的做法吗?
由于使用相对源,用户控件可以使用它,因此使用户控件在树上并且定义特定命令是有条件的吗?
想知道一些想法。
答案 0 :(得分:0)
我不能说这是不好的做法,但如果我是你,我会尝试不同的方法。
如果您的Button位于UserControl中,则它们应共享DataContext。如果它们不是,你可以简单地为Button定义一个DataContext,也不是最好的选择。
第二种选择是使用Elementname和Path进行绑定
像这样:
<Button Command="{Binding ElementName="UserControlsName", Path="PrintCommand}">
这要求您为UserControl命名,例如:<UserControl x:Name="MyUserControl"/>
它应该在同一个XAML文件中。