c# - 无法将变量发送到新的 WPF 页面
问题描述
在下面的类中,按钮ExamTemplate
从发送者那里获取,创建一个新的,并用正确的对象Exam
实例化一个CreateExam
页面:Exam
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
是空的。(我也尝试过重命名其中一个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
其他地方设置。
推荐阅读
- python - 出现错误:形状未对齐,带有 statsmodels 和简单的二维线性回归
- matlab - 绘制多个案例的 Newton-Raphson 解的结果
- reactjs - 反应原生使用状态
- java - Playstore 漏洞 HostnameVerifier 接口的不安全实现
- xml - 如何限制通过 DTD 放入元素中的字符数?
- redis - 为什么 haproxy 显示 2 个 redis 节点关闭,即使这些节点是连接到 redis 主节点的 redis 从节点?
- flutter - 使用 File Picker 在 Flutter 中将 PlatformFile 制作成 File
- google-sheets - 嵌套在数组中的动态查询公式
- r - 如何加快我的 Rcpp 代码,它只执行简单的操作?
- flutter - 如何使此代码在颤动中响应