系统以主页面开头,主表和子表可见。然后,当用户单击ReceiveOrder按钮时,将通过执行以下方法的Icommand创建新的WPF窗口
private void ReceiveOrder(object sender)
{
ReceiveOrderDialogWindow dialog = new ReceiveOrderDialogWindow()
{
Topmost = true
};
dialog.ShowDialog();
}
ReceiveOrderDialogWindow将其上下文设置为主页的副本。
public ReceiveOrderDialogWindow()
{
InitializeComponent();
this.DataContext = new OrdersViewModel("Orders");
this.SizeToContent = SizeToContent.WidthAndHeight;
}
在ReceiveOrderDialogWindow中。当用户单击确认时,将在OrdersViewModel中触发另一个ICommand。
private void ReceiveOrderConfirm(object sender)
{
createReceipt(sender);
requestSerials(sender);
Db.UpdateTable(SubVwr.Tables[0].UpdateTableQuery, SubVwr.Tables[0].Tbl);
}
如果我在RecieveOrder中运行createReceipt()它的工作原理很有效,但是当我尝试在ReceiveOrderConfirm()中运行它时,它返回主表为null。我知道这是因为上下文已经变成了OrdersViewModel的一个不同实例,主表不存在。有没有人知道从父窗口的上下文执行方法的方法?
答案 0 :(得分:2)
有没有人知道从父窗口的上下文执行方法的方法?
那么,您首先需要获得对父窗口的引用。更好的方法可能是将ReceiveOrderDialogWindow
注入已存在的OrdersViewModel
实例并仅对此操作:
<强> ReceiveOrder:强>
private void ReceiveOrder(object sender)
{
ReceiveOrderDialogWindow dialog = new ReceiveOrderDialogWindow(this.DataContext as OrdersViewModel)
{
Topmost = true
};
dialog.ShowDialog();
}
ReceiveOrderDialogWindow:
public ReceiveOrderDialogWindow(OrdersViewModel viewModel)
{
InitializeComponent();
this.DataContext = viewModel;
this.SizeToContent = SizeToContent.WidthAndHeight;
}