从不同的 ViewModel 调用方法

Calling a method from a different ViewModel

我正在编写一个管理工具库存的程序,当我让用户将工具标记为 'fixed' 时 运行 遇到了问题。

该程序应按如下方式运行:

使用 TIView、TIViewModel、TIModel:

  1. 员工检查工具。
  2. 工具在使用过程中意外损坏。
  3. 员工 return 将工具标记为已损坏并报告问题。
  4. 该工具被标记为 returned 并锁定在修复之前无法检出。

使用 VPRView、VPRViewModel 和 VPRModel:

  1. 检查员进入显示所有有问题的工具的数据网格。
  2. 检查员更正问题,将工具标记为已修复,然后提交数据。

  3. 程序使用检查员 ID 号更新 SQLite 数据库,他们的解决方案,将问题标记为已解决并记录 date/time 完成。


问题步骤:

8.该程序然后 运行s 来自 TIViewModel 的 PopulateToolInventory 方法来更新库存列表,以便工具不再被锁定。


总结:

当检查员将工具标记为已修复时,将使用 VPRView、VPRViewModel 和 VPRModel 更新数据库。在 TIViewModel 中可以找到为工具清单提取数据的方法。在通过 VPRViewModel 将数据上传到数据库后,如何让应用程序从 VPRViewModel 执行 'PopulateToolInventory' 方法?

代码示例:

VPRViewModel:

    public void SubmitSolution()
    {
        VPRModel vprm = new VPRModel();
        vprm.SubmitProblemSolution(ProblemSolved, ProblemSolution, InspectorID, SelectedReport[0].ToString());
        ProblemReports = vprm.RetrieveProblemReports();
        InspectorID = null;
        ProblemSolution = null;
        ProblemSolved = false;
        MessageBox.Show("Solution successfully recorded!", "Success!", MessageBoxButton.OK);
        // This is where I would want to call the method from the TIViewModel to update the data grid on the TIView.
    }

TIViewModel:

private DataTable _toolInventory;
public DataTable ToolInventory
    {
        get { return _toolInventory; }
        set
        {
            _toolInventory = value;
            NotifyOfPropertyChange(() => ToolInventory);
        }
    }

public void PopulateToolInventory()
    {
        TIModel tim = new TIModel();
        ToolInventory = tim.RetrieveToolInventory();
    }

ShellViewModel:

class ShellViewModel : Conductor<object>
{
    public void Open_ToolInventory()
    {
        ActivateItem(new TIViewModel());
    }
    public void ViewProblemReport()
    {
        WindowManager wm = new WindowManager();
        VPRViewModel vprvm = new VPRViewModel();
        wm.ShowDialog(vprvm);
    }
}

仅供参考:如果这对任何解决方案有帮助,我正在使用 Caliburn.Micro。

希望这些信息足够了。如果没有,就问你需要什么!另外,请不要活着吃我的代码。我是自学成才的,并且知道我离专业开发人员还很远,但这是我的热情,我真的很享受。感谢建设性的批评,只是请不要让我觉得自己很愚蠢。

在问题评论中使用 Ed 的想法我做了以下事情。

class ShellViewModel : Conductor<object>
{
    public void Open_ToolInventory()
    {
        ActivateItem(new TIViewModel());
    }
    public void ViewProblemReport()
    {
        WindowManager wm = new WindowManager();
        VPRViewModel vprvm = new VPRViewModel();
        wm.ShowDialog(vprvm);
    }
}

已更改为:

class ShellViewModel : Conductor<object>
{
    TIViewModel tivm = new TIViewModel();
    VPRViewModel vprvm = new VPRViewModel();

    public void OpenToolInventory()
    {
        ActivateItem(tivm);
    }
    public void ViewProblemReport()
    {
        WindowManager wm = new WindowManager();
        wm.ShowDialog(vprvm);
        tivm.PopulateToolInventory();
    }
}

这会在对话框关闭后运行目标方法,更新工具清单以立即反映所有已解决的问题。你是最棒的,艾德!