我正在创建一个小型应用程序,该应用程序或多或少是MVVM的个人培训应用程序。在我的应用程序中,我有一个ListView
,其ItemsSource
属性绑定(bind)到ObservableCollection<PetViewModel>
。每个PetViewModel
代表实际的Pet
模型/对象。
可以选择作为ListViewItems
对象的PetViewModel
,然后可以购买Pet
。我的问题是,处理这种情况的通常方法是什么,我们不希望购买PetViewModel
,但要购买的是实际的Pet?
让我详细说明一下:我想购买一只宠物,所以我选择一个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的普遍问题。我以我的应用程序为例。
最佳答案
真的要看
在您的方案中,听起来您的PetViewModel
可以轻松地带有OrderCommand
(ICommand
),并可以处理订购本身的逻辑。这避免了将底层模型公开为公共(public)属性,因为VM将直接处理所有这些“特定于应用程序”的逻辑。
关于c# - MVVM-处理需要在ViewModel表示的基础模型上执行的操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22669960/