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