Wpf 如何将DataTemplate中的按钮绑定到ViewModel?

Wpf 如何将DataTemplate中的按钮绑定到ViewModel?,wpf,binding,mvvm,prism,mvvm-light,Wpf,Binding,Mvvm,Prism,Mvvm Light,我有一个DataTemplate放在ResourceDictionary中,在DataTemplate中有一个按钮,我把这个DataTemplate放在一个窗口中。现在我想将Button命令绑定到windowViewModel的一个属性,我该怎么做? 代码如下: 在Window.xaml中 <ContentControl Content="{Binding User}" ContentTemplate="{StaticResource UserTemp}" /> 在Wind

我有一个
DataTemplate
放在
ResourceDictionary
中,在
DataTemplate
中有一个按钮,我把这个
DataTemplate
放在一个窗口中。现在我想将Button命令绑定到
windowViewModel
的一个属性,我该怎么做? 代码如下:


在Window.xaml中

<ContentControl Content="{Binding User}" ContentTemplate="{StaticResource UserTemp}" />

在WindowViewModel中:

public图标命令并选择location命令
{
获取{返回新的RelayCommand(selectLocationCommand);}
}
void selectLocationCommand()
{
_welcomeTitle=“AA”;
}

简单的回答是,你不需要用代码来做

您将DataTemplate定义为“用户”对象的模板。这意味着这就是用户对象在UI中的显示方式。因此,为了使用DataTemplate,在WindowViewModel中应该有一个“用户”实例。这意味着SelectLocationCommand应该在用户对象中,而不是在WindowViewModel中

话虽如此,您的代码应该是这样的:

在Window.xaml中

<ContentControl Content="{Binding User}" ContentTemplate="{StaticResource UserTemp}" />
使用中

public ICommand SelectLocationCommand
{
    get {return new RelayCommand(selectLocationCommand); }
}
void selectLocationCommand()
{
    _welcomeTitle = "AA";
}
另外,确保Window.xaml的DataContext是WindowViewModel。有很多更好的方法可以做到这一点,但最简单的方法是:

在Window.xaml.cs中

public MainWindow()
{
    InitializeComponent();
    this.DataContext = new WindowViewModel();
}

谢谢alex,但我不想将SelectLocationCommand放在用户类中!!实际上用户就是实体类!在父视图模型中使用该命令有一些解决方案,如果您能提供有关设计的更多详细信息,我可能会更好地帮助您。当你说用户实际上是实体类时,你的意思是这就是模型吗?谢谢alex,它有一个非常简单的解决方案,你只需要为窗口设置一个名称,在dataTemplate bindig中,将elementname指定为该名称。