C# 主窗口和用户控件,用户控件上的事件处理

C# 主窗口和用户控件,用户控件上的事件处理,c#,.net,wpf,C#,.net,Wpf,我有MainWindow和DataDetails用户控件。DataDetails显示在窗口右侧的MainWindow内,并使用xaml呈现 <Views:DataDetails /> 这里没有显示LoadData方法以减少代码量,这同样适用于SDE主窗口 在MainWindow.xaml中,我添加了带有的DataDetails用户控件,在window标记元素中,我添加了这个名称空间,所以这个用户控件正确地显示在MainWindow中。在DataDetails内部,我有按钮单击事件连

我有MainWindow和DataDetails用户控件。DataDetails显示在窗口右侧的MainWindow内,并使用xaml呈现

<Views:DataDetails />
这里没有显示LoadData方法以减少代码量,这同样适用于SDE主窗口

在MainWindow.xaml中,我添加了带有
的DataDetails用户控件,在window标记元素中,我添加了这个名称空间,所以这个用户控件正确地显示在MainWindow中。在DataDetails内部,我有按钮单击事件连接到命令SaveDataCommand,并在DataDetailsViewModel内部命令自身

DataDetails.xaml

...
<Button Name="btnSearch" 
        Command="{Binding  SearchByCommand, Mode=OneWay}"> Search </Button>
<Button Name="btnSave" 
            Command="{Binding  SaveDataCommand, Mode=OneWay}"> Save data</Button>
public ICommand SaveDataCommand
{
    get
    {
        _SaveDataCommand = new RelayCommand(
             x=>this.SaveData(), null);
             return _SaveDataCommand;
    }            
}

同样,这里没有显示此方法(SaveData)以减少代码量。调试此SaveDataCommand时,不会命中,单击按钮时,不会发生任何事情。这里我缺少什么?

如何建立应该绑定到嵌套用户控件的VM?在视图的构造函数中?有很多方法可以做到这一点,我经常使用的一种方法是在主VM上将“详细视图模型”作为属性公开,然后适当地设置数据上下文:

<Views:DataDetails DataContext={Binding DataDetails} />

当然,有许多不同的方法可以为详细信息视图建立数据上下文,以上只是众多选项之一。

在哪里将DataDetails DataContext设置为DataDetailsViewModel?DataDetailsViewModel是MainWindowViewModel的属性吗?
<Views:DataDetails DataContext={Binding DataDetails} />
public DataDetailsViewModel DataDetails { get { return _dataDetailsViewModel; } }