系统以主页开头,其中可见主表和子表。然后,当用户单击接收顺序按钮时,将通过iCommand创建一个新的WPF窗口,该窗口执行以下方法
private void ReceiveOrder(object sender)
{
ReceiveOrderDialogWindow dialog = new ReceiveOrderDialogWindow()
{
Topmost = true
};
dialog.ShowDialog();
}
receedorderdialogWindow的上下文设置为主页的副本。
public ReceiveOrderDialogWindow()
{
InitializeComponent();
this.DataContext = new OrdersViewModel("Orders");
this.SizeToContent = SizeToContent.WidthAndHeight;
}
在RececterorderDialogWindow中。当用户单击确认时,在ordersViewModel中触发另一个ICommand。
private void ReceiveOrderConfirm(object sender)
{
createReceipt(sender);
requestSerials(sender);
Db.UpdateTable(SubVwr.Tables[0].UpdateTableQuery, SubVwr.Tables[0].Tbl);
}
如果我在接收器的内部运行createCeipt((,则可以运行pereftct,但是当我尝试在Recectordorderconfirm((内运行它时,它会返回主表为null。我知道这是因为上下文已更改为OrdersViewModel的不同实例,而主表不存在。有人知道一种从父窗口上下文中执行方法的方法吗?
有人知道一种从父窗口上下文中执行方法的方法吗?
好吧,您首先需要获取对父窗口的引用。更好的方法可能是将ReceiveOrderDialogWindow
注入OrdersViewModel
的现有实例,仅在此方面运行:
接收方:
private void ReceiveOrder(object sender)
{
ReceiveOrderDialogWindow dialog = new ReceiveOrderDialogWindow(this.DataContext as OrdersViewModel)
{
Topmost = true
};
dialog.ShowDialog();
}
receertordorderdialogwindow:
public ReceiveOrderDialogWindow(OrdersViewModel viewModel)
{
InitializeComponent();
this.DataContext = viewModel;
this.SizeToContent = SizeToContent.WidthAndHeight;
}