在资源字典中使用控件模板内的命令 - 好还是坏?

时间:2015-12-24 20:19:52

标签: wpf

我在资源字典中定义了一个控件模板。

<Button Command="{Binding Path=DataContext.PrintCommand, 
                                       RelativeSource={RelativeSource    
Mode=FindAncestor,AncestorType={x:Type UserControl}}}">

我正在使用相对源来获取数据上下文并访问viewmodel。

在PrintViewModel中

public ICommand PrintCommand { get; set; }

在Usercontrol中,我设置了datacontext = PrintViewModel

它为我工作。但这是不好的做法吗?

由于使用相对源,用户控件可以使用它,因此使用户控件在树上并且定义特定命令是有条件的吗?

想知道一些想法。

1 个答案:

答案 0 :(得分:0)

我不能说这是不好的做法,但如果我是你,我会尝试不同的方法。

如果您的Button位于UserControl中,则它们应共享DataContext。如果它们不是,你可以简单地为Button定义一个DataContext,也不是最好的选择。
第二种选择是使用Elementname和Path进行绑定 像这样:

<Button Command="{Binding ElementName="UserControlsName", Path="PrintCommand}">

这要求您为UserControl命名,例如:<UserControl x:Name="MyUserControl"/> 它应该在同一个XAML文件中。