在下面的类中,按钮从发送方获取ExamTemplate
,创建新的Exam
,并用正确的Exam
对象实例化CreateExam
页面:
public partial class SelectExamTemplate : Page {
public SelectExamTemplate() {
InitializeComponent();
templateItemsControl.ItemsSource = viewModel.templates;
}
private SelectExamTemplate_ViewModel viewModel = new SelectExamTemplate_ViewModel();
private void SelectTemplateButton_Click(object sender, RoutedEventArgs e) {
ExamTemplate selectedTemplate = (ExamTemplate) ((Button) sender).DataContext;
Exam newExam = new Exam() { Template = selectedTemplate };
NavigationService.Navigate(new CreateExam() { Exam = newExam });
}
}
然后是CreateExam
页面:
public partial class CreateExam : Page {
public CreateExam() {
InitializeComponent();
this.DataContext = this;
}
private void CreateButton_Click(object sender, RoutedEventArgs e) {
// todo: validate more fully
if (!(Exam.Name?.Length > 0)) {
MessageBox.Show("Please enter a name for the exam.");
return;
}
NavigationService.Navigate(new ExamInfo_Home() { Exam = Exam });
}
public Exam Exam { get; set; }
}
元素显示已经创建了新的,并且在第一个类中选择了模板。然而,下一个类不起作用:
public partial class ExamInfo_Home : Page {
public ExamInfo_Home() {
InitializeComponent();
this.DataContext = Exam;
System.Console.WriteLine("Exam:");
System.Console.WriteLine(Exam);
}
public Exam Exam { get; set; }
}
在构造函数末尾设置断点表明Exam
为null。(我也尝试过重命名其中一个Exam
属性,以防Exam = Exam
做了一些令人困惑的事情,但这没有奏效,再加上悬停在每个属性上表明编译器(或任何人(确切地知道每个单词指的是什么(正确地(。
据我所知,我使用的技术与将Exam
从Select传递到Create和将其从Create传递到Info完全相同。
为什么它不起作用?
在Create
类中,当您调用NavigationService.Navigate(new ExamInfo_Home() { Exam = Exam });
时,您正在创建一个新的ExamInfo_Home
对象,然后您设置了Exam = Exam
。在Info
构造函数中,您将this.DataContext
设置为一个尚未填充的对象。
您应该将Exam
对象传递到构造函数中,如下所示:new ExamInfo_Home(Exam)
或在其他地方设置DataContext
。