why this error:
Edit level mismatch in AcceptChanges at Csla.Core.UndoableBase.AcceptChanges(Int32 parentEditLevel) at Csla.Core.UndoableBase.Csla.Core.IUndoableObject.AcceptChanges(Int32 parentEditLevel, Boolean parentBindingEdit) at Csla.Core.FieldManager.FieldDataManager.Csla.Core.IUndoableObject.AcceptChanges(Int32 parentEditLevel, Boolean parentBindingEdit) at Csla.Core.BusinessBase.AcceptingChanges() at Csla.Core.UndoableBase.AcceptChanges(Int32 parentEditLevel) at Csla.Core.BusinessBase.ApplyEdit() at Csla.Xaml.CslaDataProvider.Save()
------
my bo object has a child of elements
I use it in a viewmodel for a treeview in the xaml for building a observable collection from it
all actions are working, but when I save I get the above error.
the viewmodels that are use in depedence objects are this is set ManageObjectLifetime = false;
that was the error with one of our other projects, but not in this case
what else could be wrong.
Do you have a viewmodel for any child objects? ViewModelBase, by default, manages the Model object's lifetime - which means it calls BeginEdit automatically. It wouldn't call ApplyEdit automatically for a child object though.
Usually what you do for a viewmodel that represents a child object, is in the viewmodel's constructor you set ManageObjectLifetime = false.
yes, must we only have one viewmodel, because we have a viewmodel for every diffrent child.
class layout:
- ProductCatelogueEditViewModel<CatelogueER> : parent (child of ProductER without viewmodel link to CSLAAdapter)
- ProductCatelogueCategoryViewmodel<CatelogueCategoryEC> : child of above and himself
- ProductCatelogueItemViewmodel<CatelogueItemEC> : child of above
for the treeview observablecollection for the xaml there are:
- ProductCatelogueRootItem is a DependencyObject that contains ProductCatelogueEditViewmodel
- ProductCatelogueCategoryItem is a DependencyObject that contains CatelogueCategoryViewmodel
- ProductCatelogueItem is a DependencyObject that contains CatelogueItemViewmodel
the treeview are build out of above items.
I think about viewmodel objects as having the same parent-child hierarchy as the business objects they contain. Only the root viewmodel should have ManageObjectLifetime as true, so child viewmodels must explicitly set this value to false.
yes thanks, my parent's manageobjectlifetime was true and all the children was false, the 1st child manageobjectlifetime is also false from the parent, that was not the problem, the problem was this:
Csla.RelationshipTypes.Child was Csla.RelationshipTypes.lazyload //lazyload do not work
in Parent:
private static readonly PropertyInfo<CatalogueER> CatalogueProperty = RegisterProperty<CatalogueER>(p => p.Catalogue, Csla.RelationshipTypes.Child);
public CatalogueER Catalogue
{
get
{
if (!FieldManager.FieldExists(CatalogueProperty) || ReadProperty(CatalogueProperty) == null)
return null; //new CatalogueER();
else
return ReadProperty(CatalogueProperty);
}
set
{
LoadProperty(CatalogueProperty, value);
OnPropertyChanged("Catalogue");
}
}
this property is the 1st child and viemodel of the treeview in it are the category of category until items...
lol thanks man
Copyright (c) Marimer LLC