我正在创建一个小型应用程序,它或多或少是MVVM的个人培训应用程序。在我的应用程序中,我有一个ListView
,其ItemsSource
属性绑定到ObservableCollection<PetViewModel>
。每个PetViewModel
代表实际的Pet
模型/对象。
可以选择ListViewItems
个PetViewModel
个对象,然后可以购买Pet
。我的问题是,处理这种情况的常用方法是什么,我们不希望购买PetViewModel
,但它代表的是实际的宠物?
让我详细说明:我想购买一只宠物,因此我选择ListViewItem
(PetViewModel
)并点击购买按钮。然后我想记录购买(在这种情况下通过Order
对象),Order
将存储在某种类型的数据库中,例如XML文件。将Pet
模型作为PetViewModel
的属性是好的/通常做法,然后我可以在保存这些对象时通过Pet
访问PetViewModel
模型到数据库?
创建订单的示例代码可能是:
Order o = new Order();
o.Customer = GetCurrentCustomer();
o.PurchasedPet = petViewModel.Pet;
SaveOrderToDatabase(o);
这是完全可以接受的MVVM还是有更好的方法来处理ViewModel所代表的底层模型的操作?
注意:这不是我的应用程序特有的。这是关于MVVM的一般问题。我使用我的应用程序作为一个具体的例子。
答案 0 :(得分:1)
这真的取决于。
在您的方案中,听起来PetViewModel
可能很容易在其上OrderCommand
(ICommand
),并处理订购本身的逻辑。这避免了需要将底层模型公开为公共属性,因为VM将直接处理所有这些“特定于应用程序”的逻辑。