public static T Clone <T>(this T viewModel, bool includeCollections = true) where T : ViewModel { T clone = MVVMKernelExtensions.CreateViewModel <T>(); foreach (var prop in viewModel.Properties) { var sourceP = prop.Property; var cloneP = clone[sourceP.PropertyName].Property; if (!prop.IsCollectionProperty && !prop.IsComputed && !(prop.Property is StateMachine)) //regular property { cloneP.ObjectValue = sourceP.ObjectValue; } else if (prop.IsComputed || prop.Property is StateMachine) //computed stuff { //Those will be assigned automatically } else if (prop.IsCollectionProperty && includeCollections) //collections { var sourceList = sourceP as IList; var cloneList = cloneP as IList; for (int i = 0; i < sourceList.Count; i++) { cloneList.Add(sourceList[i]); } } } return(clone); }
object ITypeResolver.CreateInstance(string name, string identifier) { var type = ((ITypeResolver)this).GetType(name); #if NETFX_CORE var isViewModel = type.GetTypeInfo().IsSubclassOf(typeof(ViewModel)); #else var isViewModel = typeof(ViewModel).IsAssignableFrom(type); #endif if (isViewModel) { var contextViewModel = Container.Resolve(type, identifier); if (contextViewModel != null) { return(contextViewModel); } return(MVVMKernelExtensions.CreateViewModel(type, identifier)); } return(null); }