【发布时间】:2014-01-06 16:08:05
【问题描述】:
我有 MainWindow 和 DataDetails 用户控件。 DataDetails 显示在窗口右侧的 MainWindow 内,并使用 xaml 呈现
<Views:DataDetails />
MainWindow 和 DataDetails 都使用视图模型,我想保持代码隐藏不变。所以我使用命令进行事件处理,但我对这种方法有疑问。 MainWindow 上的单击事件正常工作,DataDetails 上的相同方法不起作用,这是代码
MainWindow.xaml
...
<Button Name="btnSearch"
Command="{Binding SearchByCommand, Mode=OneWay}"> Search </Button>
MainWindowViewModel.cs
public ICommand SearchByCommand
{
get
{
if (_SearchByCommand == null)
{
_SearchByCommand = new RelayCommand(
x => this.LoadData(this.SearchBy),
x => { return !string.IsNullOrEmpty(this.SearchText); }
);
}
return _SearchByCommand;
}
}
此处未显示 LoadData 方法以减少代码量,这同样适用于 MainWindow。
在 MainWindow.xaml 中我添加了带有 <Views:DataDetails /> 的 DataDetails 用户控件,在窗口标记元素中我添加了这个命名空间,所以这个用户控件在 MainWindow 中正确显示。在 DataDetails 中,我将按钮单击事件连接到 Command SaveDataCommand 和 DataDetailsViewModel 中的命令本身。
DataDetails.xaml
<Button Name="btnSave"
Command="{Binding SaveDataCommand, Mode=OneWay}"> Save data</Button>
DataDetailsViewModel
public ICommand SaveDataCommand
{
get
{
_SaveDataCommand = new RelayCommand(
x=>this.SaveData(), null);
return _SaveDataCommand;
}
}
这里没有显示此方法(SaveData)以减少代码量。在调试此 SaveDataCommand 时永远不会被击中,在按钮单击时没有任何反应。我在这里缺少什么?
【问题讨论】:
-
在哪里设置 DataDetails DataContext 为 DataDetailsViewModel? DataDetailsViewModel 是 MainWindowViewModel 的属性吗?