从父窗口上下文启动方法



系统以主页开头,其中可见主表和子表。然后,当用户单击接收顺序按钮时,将通过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;
}

最新更新