2016-08-24 114 views
0

我在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模板

回答

0

...我的策略是得到一個實例o f從我的模型中獲取CollectionViewModel,並使用其Save方法將相同模型中的對象作爲參數發送。

恐怕這個策略是錯誤的。您應該使用由相應的CollectionViewModel(綁定到網格)提供的New()命令。 真正的用法取決於您的特定需求。在一個簡單的例子中,您可以在網格上方添加一個按鈕,然後將New命令綁定到該按鈕。

相關DX支持線程:Batch Insert/ Edit with Master/Detail

相關問題