从不同的 ViewModel 调用方法
Calling a method from a different ViewModel
我正在编写一个管理工具库存的程序,当我让用户将工具标记为 'fixed' 时 运行 遇到了问题。
该程序应按如下方式运行:
使用 TIView、TIViewModel、TIModel:
- 员工检查工具。
- 工具在使用过程中意外损坏。
- 员工 return 将工具标记为已损坏并报告问题。
- 该工具被标记为 returned 并锁定在修复之前无法检出。
使用 VPRView、VPRViewModel 和 VPRModel:
- 检查员进入显示所有有问题的工具的数据网格。
检查员更正问题,将工具标记为已修复,然后提交数据。
程序使用检查员 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();
}
}
这会在对话框关闭后运行目标方法,更新工具清单以立即反映所有已解决的问题。你是最棒的,艾德!
我正在编写一个管理工具库存的程序,当我让用户将工具标记为 'fixed' 时 运行 遇到了问题。
该程序应按如下方式运行:
使用 TIView、TIViewModel、TIModel:
- 员工检查工具。
- 工具在使用过程中意外损坏。
- 员工 return 将工具标记为已损坏并报告问题。
- 该工具被标记为 returned 并锁定在修复之前无法检出。
使用 VPRView、VPRViewModel 和 VPRModel:
- 检查员进入显示所有有问题的工具的数据网格。
检查员更正问题,将工具标记为已修复,然后提交数据。
程序使用检查员 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();
}
}
这会在对话框关闭后运行目标方法,更新工具清单以立即反映所有已解决的问题。你是最棒的,艾德!