将变量发送到新的WPF页面时出现问题

  • 本文关键字:问题 WPF 变量 c# wpf
  • 更新时间 :
  • 英文 :


在下面的类中,按钮从发送方获取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

最新更新