我有一个加载了 ProductList 的 View / ViewModel。此列表在屏幕上不可见。
我需要做的是显示一个新的视图/视图模型(例如 SelectProductView / SelectProductViewModel),将 ProductList 传递给它们,在用户选择特定产品后,关闭此视图并使用所选产品。
实现这一目标的最佳方法是什么?
我正在使用 MVVMLight,但我想这些想法不应该仅限于此。最简单的方法是创建一个视图,并将集合传递给它,但这听起来对 MVVM 不友好。我正在考虑从第一个 ViewModel 创建一个 SelectProductViewModel 并将集合传递给它,但我不知道如何自动创建 SelectProductView 并将其绑定到创建的 SelectProductViewModel。
编辑:在我的应用程序视图结构中有点复杂。我有一个主视图,它基本上需要托管一个 SelectProductView,因为这个视图必须覆盖整个屏幕。MainView 包含许多子视图和孙视图(通过选项卡),因此可能有 3 个不同的子视图或大子视图可以发出选择产品的请求。此外,某些视图不会预加载产品,因此该任务可能应该传播到 SelectProductViewModel。
结构示例:
MainView
/ \
ChildViewA ChildViewB
/ \ / \
GrandChildViewA1 GrandChildViewA2 GrandChildViewB1 GrandChildViewB2
因此,GrandChildViewA1、ChildViewB 和 GrandChildViewB2 可以发出选择产品的请求。只有发出请求的视图才能获得选择的产品,其他人不应理会它。GrandChildViewA1 将在其中加载产品,但 GrandChildViewB2 不会在其中加载 ProductList。这意味着,出于性能考虑,GrandChildViewA1 应该将产品列表传递给 SelectProductViewModel,而 GrandCHildViewB2 中不会包含产品列表,因此 SelectProductViewModel 应该从数据库中获取数据。