从另一个ViewModel

时间:2017-10-10 18:40:28

标签: c# wpf mvvm caliburn.micro

我正在编写一个用于管理工具库存的程序,并且当我让用户将工具标记为“已修复”时会遇到问题。

该计划应如下工作:

使用TIView,TIViewModel,TIModel:

  1. 员工检查工具。
  2. 工具在使用过程中发生损坏。
  3. 员工返回将其标记为已损坏并报告问题的工具。
  4. 该工具被标记为已退回并被锁定,无法检出直至修复。
  5. 使用VPRView,VPRViewModel和VPRModel:

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

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

    4. 问题步骤:

      8。然后,程序从TIViewModel运行PopulateToolInventory方法以更新清单列表,以便不再锁定该工具。

      总结:

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

      代码示例:

      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。

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

1 个答案:

答案 0 :(得分:0)

在问题评论中使用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();
    }
}

在对话框关闭后运行目标方法,更新工具库存以立即反映所有已解决的问题。你是最好的,Ed!