这是页面构造函数代码
public DebitNoteCreation(int transactionID) :
this()
{
try
{
InsertDebitNote dn = new InsertDebitNote();
dn.Load(transactionID);
this.DataContext = dn;
}
catch (Exception)
{
MessageBox.Show("Some of the entries for this transaction are empty so kindly complete them", "Error");
}
this.NavigationService.Navigate(new Uri("DisplayTransaction.xaml", UriKind.Relative));
}
错误消息
对象引用未设置为对象的实例。
我能够看到消息框但是在我点击确定按钮后,它会抛出上面写的错误。
答案 0 :(得分:3)
由于在之后发生错误,因此单击“确定”,我期待 this.NavigationService
为null
,原因是构造函数失败。
此外,您不应该假设Exception
表示“此事务的某些条目为空,因此请完成它们”,并且当构造函数明显无法完全初始化对象时允许构造函数成功非常危险。
事实上,仅用户界面应该正在做消息框 。我会重写,以便在检查事务(即您希望成为问题的场景)之后抛出已知异常。让UI捕获该异常并在那里执行消息框。
答案 1 :(得分:1)
如果抛出异常以便显示消息框,则表明出现了问题......并且您不会向this.DataContext
分配任何内容。这很可能会导致后续错误。
查看NullReferenceException
的堆栈跟踪,看看完全扔掉了什么,但基本上你是想继续使用一个未完全初始化的对象,这很少是好的想法。
(请注意,你应该捕获一个更具体的异常,你应该记录它,而不是只显示一个消息框,然后忽略它。)
如果 继续前进,请将上下文设置为空注释或类似内容。我怀疑你实际上并不想在这种情况下显示页面。您可能需要考虑在构建页面之前加载事务,以使事情更清晰。