以编程方式在MVVM Devexpress项目中保存数据
问题描述:
我在Devexpress中用Scaffolding wizard创建了一个WPF MVVM项目,创建的所有东西都正常工作,我甚至修改了网格,因此他们调用RowUpdated
上的SaveCommand
。以编程方式在MVVM Devexpress项目中保存数据
现在我试图以编程方式插入新的寄存器,我的策略是从我的模型中获取CollectionViewModel
的实例,并使用它的Save
方法将相同模型中的对象作为参数发送。
我正在阅读this指南,但仍然无法找到我做错了什么。
这是代码
Transaction transaction = new Transaction();
transaction.IdClient = 1;
TransactionCollectionViewModel tcvm = TransactionCollectionViewModel.Create(UnitOfWorkSource.GetUnitOfWorkFactory());
tcvm.Save(transaction);
并调用Save
功能
System.NullReferenceException was unhandled by user code
HResult=-2147467261
Message=Object reference not set to an instance of an object.
Source=DevExpress.Mvvm.v16.1.DataModel
StackTrace:
at DevExpress.Mvvm.DataModel.RepositoryExtensions.<>c__DisplayClass1_0`3.<GetProjectionPrimaryKey>b__0(TEntity x)
at DevExpress.Mvvm.DataModel.RepositoryExtensions.GetProjectionValue[TEntity,TProjection,TEntityResult,TProjectionResult](TProjection value, Func`2 entityFunc, Func`2 projectionFunc)
at DevExpress.Mvvm.DataModel.RepositoryExtensions.GetProjectionPrimaryKey[TEntity,TProjection,TPrimaryKey](IRepository`2 repository, TProjection projectionEntity)
at DevExpress.Mvvm.DataModel.RepositoryExtensions.FindExistingOrAddNewEntity[TEntity,TProjection,TPrimaryKey](IRepository`2 repository, TProjection projectionEntity, Action`2 applyProjectionPropertiesToEntity)
at DevExpress.Mvvm.ViewModel.CollectionViewModelBase`4.Save(TProjection projectionEntity)
at Template.ViewModels.ClientCollectionViewModel..ctor(IUnitOfWorkFactory`1 unitOfWorkFactory) in C:\Users\edwin\Source\Workspaces\INVASST\Template\Template\ViewModels\Client\ClientCollectionViewModel.cs:line 37
at ClientCollectionViewModel_97cd3897_6fb7_469b_9928_d61260161e61..ctor(IUnitOfWorkFactory`1 unitOfWorkFactory)
InnerException:
我使用的DevExpress 16.1.5时,它给了我这个错误的变量tcvm
和项目使用HybridApp模板
答
...我的策略是得到一个实例o f从我的模型中获取CollectionViewModel,并使用其Save方法将相同模型中的对象作为参数发送。
恐怕这个策略是错误的。您应该使用由相应的CollectionViewModel(绑定到网格)提供的New()
命令。 真正的用法取决于您的特定需求。在一个简单的例子中,您可以在网格上方添加一个按钮,然后将New命令绑定到该按钮。