protected virtual void Delete(object persisted, NavigationEntry parentNavigation, HashSet <object> visited) { var args = _eventManager.OnEntityDeleting(persisted, parentNavigation); EntityEntry entry = GetEntry(args.Entity); entry.State = EntityState.Deleted; visited.Add(entry.Entity); foreach (NavigationEntry navigationEntry in entry.Navigations) { if (navigationEntry.Metadata.IsOwned()) //recursive deletion for owned properties. { if (navigationEntry.CurrentValue != null) { if (navigationEntry.Metadata.IsCollection()) { foreach (object item in (IEnumerable)navigationEntry.CurrentValue) { Delete(item, navigationEntry, visited); //delete collection item. } } else { if (!visited.Contains(navigationEntry.CurrentValue)) { Delete(navigationEntry.CurrentValue, navigationEntry, visited); //delete reference. } } } } } _eventManager.OnEntityDeleted(entry, parentNavigation); }
private IEnumerable <AuditLogDetail> CreateComplexTypeLogDetails(string propertyName) { NavigationEntry entryMember = DbEntry.Member(propertyName) as NavigationEntry; if (entryMember != null) { Type complexTypeObj = entryMember.CurrentValue.GetType(); foreach (PropertyInfo pi in complexTypeObj.GetProperties()) { string complexTypePropertyName = $"{propertyName}_{pi.Name}"; object complexTypeOrigValue = OriginalValue(propertyName); object complexTypeNewValue = CurrentValue(propertyName); object origValue = complexTypeOrigValue == null ? null : pi.GetValue(complexTypeOrigValue); object newValue = complexTypeNewValue == null ? null : pi.GetValue(complexTypeNewValue); Comparator comparator = ComparatorFactory.GetComparator(complexTypeObj); if (!comparator.AreEqual(newValue, origValue)) { yield return(new AuditLogDetail { PropertyName = complexTypePropertyName, OriginalValue = origValue?.ToString(), NewValue = newValue?.ToString(), Log = _log }); } } } }
/// <inheritdoc /> public virtual async Task DeleteAsync(TId id, CancellationToken cancellationToken) { _traceWriter.LogMethodStart(new { id }); // This enables OnWritingAsync() to fetch the resource, which adds it to the change tracker. // If so, we'll reuse the tracked resource instead of a placeholder resource. var emptyResource = _resourceFactory.CreateInstance <TResource>(); emptyResource.Id = id; await _resourceDefinitionAccessor.OnWritingAsync(emptyResource, OperationKind.DeleteResource, cancellationToken); using var collector = new PlaceholderResourceCollector(_resourceFactory, _dbContext); TResource resource = collector.CreateForId <TResource, TId>(id); foreach (RelationshipAttribute relationship in _resourceGraph.GetRelationships <TResource>()) { // Loads the data of the relationship, if in EF Core it is configured in such a way that loading the related // entities into memory is required for successfully executing the selected deletion behavior. if (RequiresLoadOfRelationshipForDeletion(relationship)) { NavigationEntry navigation = GetNavigationEntry(resource, relationship); await navigation.LoadAsync(cancellationToken); } } _dbContext.Remove(resource); await SaveChangesAsync(cancellationToken); await _resourceDefinitionAccessor.OnWriteSucceededAsync(resource, OperationKind.DeleteResource, cancellationToken); }
/// <inheritdoc /> public virtual async Task DeleteAsync(TId id, CancellationToken cancellationToken) { _traceWriter.LogMethodStart(new { id }); using var collector = new PlaceholderResourceCollector(_resourceFactory, _dbContext); TResource resource = collector.CreateForId <TResource, TId>(id); foreach (RelationshipAttribute relationship in _resourceGraph.GetRelationships <TResource>()) { // Loads the data of the relationship, if in EF Core it is configured in such a way that loading the related // entities into memory is required for successfully executing the selected deletion behavior. if (RequiresLoadOfRelationshipForDeletion(relationship)) { NavigationEntry navigation = GetNavigationEntry(resource, relationship); await navigation.LoadAsync(cancellationToken); } } _dbContext.Remove(resource); await SaveChangesAsync(cancellationToken); }
private static int GetReferenceCount(NavigationEntry navigation) { if (!navigation.IsLoaded) { return(0); } var value = navigation.CurrentValue; if (value == null) { return(0); } if (!navigation.Metadata.IsCollection) { return(1); } var count = 0; foreach (var _ in (IEnumerable)value) { count++; } return(count); }
private bool ShouldLoad(object entity, string navigationName, out NavigationEntry navigationEntry) { if (_disposed) { Logger.LazyLoadOnDisposedContextWarning(Context, entity, navigationName); } else if (Context.ChangeTracker.LazyLoadingEnabled) { var entityEntry = Context.Entry(entity); navigationEntry = entityEntry.Navigation(navigationName); if (entityEntry.State == EntityState.Detached) { var value = navigationEntry.CurrentValue; if (value == null || (navigationEntry.Metadata.IsCollection() && !((IEnumerable)value).Any())) { Logger.DetachedLazyLoadingWarning(Context, entity, navigationName); } } else if (!navigationEntry.IsLoaded) { Logger.NavigationLazyLoading(Context, entity, navigationName); return(true); } } navigationEntry = null; return(false); }
public NavigationEntryViewModel(IViewModelDependencies dependencies, IZetboxContext dataCtx, ViewModel parent, NavigationEntry screen) : base(dependencies, dataCtx, parent, screen) { if (screen == null) throw new ArgumentNullException("screen"); _screen = screen; _screen.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(_screen_PropertyChanged); }
private void ListView_ItemClick(object sender, ItemClickEventArgs e) { if (e.ClickedItem is NavigationEntry) { NavigationEntry entry = (NavigationEntry)e.ClickedItem; rootFrame.Navigate(entry.Destination); } }
public void OnLoadingStateChange( IWebBrowser browserControl, LoadingStateChangedEventArgs loadingStateChangedArgs) { Action <LoadingStateChangedEventArgs> loadingStateChange = this.LoadingStateChange; if (loadingStateChange != null) { loadingStateChange(loadingStateChangedArgs); } if (loadingStateChangedArgs.IsLoading) { return; } Cef.UIThreadTaskFactory.StartNew((Action)(() => { IBrowserHost host = browserControl.GetBrowser().GetHost(); if (host.IsDisposed) { return; } if (loadingStateChangedArgs.Browser.IsDisposed) { return; } try { if (browserControl.GetBrowser().IsPopup) { if (!loadingStateChangedArgs.Browser.MainFrame.Url.ToLower().StartsWith("https://")) { return; } Action <bool> connectionChanged = this.IsSecureConnectionChanged; if (connectionChanged == null) { return; } connectionChanged(true); } else { NavigationEntry visibleNavigationEntry = host.GetVisibleNavigationEntry(); Action <bool> connectionChanged = this.IsSecureConnectionChanged; if (connectionChanged == null) { return; } connectionChanged(visibleNavigationEntry.SslStatus.IsSecureConnection); } } catch (Exception ex) { Console.WriteLine((object)ex); } })); }
public WebHistoryEntry(NavigationEntry navigationEntry) { Current = navigationEntry.Current; Kind = navigationEntry.Kind; VisitedAt = navigationEntry.VisitedAt; WebUri = navigationEntry.WebUri; NativePageParam = navigationEntry.NativePageParam; NativePageType = navigationEntry.NativePageType; }
public void Navigate(NavigationEntry navigationEntry) { if (navigationEntry == null) { throw new ArgumentNullException("navigationEntry"); } SlideDirection = SlideDirection.Forward; _navigationJournal.Current = navigationEntry; CommandManager.InvalidateRequerySuggested(); }
internal NavigationEntry Push(GwenForm form, bool notify = true) { var entry = new NavigationEntry(form); Stack.Push(entry); if (notify && OnFormAdded != null) { OnFormAdded(this, entry); } return(entry); }
public EntityAddingEventArgs OnEntityAdding(object detached, NavigationEntry navigation) { EntityAddingEventArgs args = new EntityAddingEventArgs { Entity = detached, ParentNavigationEntry = navigation }; _entityAdding.Raise(this, args); return(args); }
public EntityAttachedEventArgs OnEntityAttached(EntityEntry persisted, NavigationEntry navigation) { EntityAttachedEventArgs args = new EntityAttachedEventArgs { EntityEntry = persisted, ParentNavigationEntry = navigation }; _entityAttached.Raise(this, args); return(args); }
//internal void PopToRoot() //{ // if (!IsEmpty) // { // var first = Stack.First().form; // this.Replace(first); // } //} internal void Replace(GwenForm form) { Clear(); var entry = new NavigationEntry(form, true); Stack.Push(entry); if (OnFormAdded != null) { OnFormAdded(this, entry); } }
public EntityDeletingEventArgs OnEntityDeleting(object persisted, NavigationEntry navigation) { EntityDeletingEventArgs args = new EntityDeletingEventArgs { Entity = persisted, ParentNavigationEntry = navigation }; _entityDeleting.Raise(this, args); return(args); }
public EntityDeletedEventArgs OnEntityDeleted(EntityEntry entry, NavigationEntry navigation) { EntityDeletedEventArgs args = new EntityDeletedEventArgs { EntityEntry = entry, ParentNavigationEntry = navigation }; _entityDeleted.Raise(this, args); return(args); }
protected virtual EntityEntry Attach(object detached, NavigationEntry parentNavigation) { var args = _eventManager.OnEntityAttaching(detached, parentNavigation); EntityEntry persisted = GetEntry(detached); if (persisted.State != EntityState.Added && persisted.State != EntityState.Deleted) { persisted.State = EntityState.Unchanged; } return(_eventManager.OnEntityAttached(persisted, parentNavigation).EntityEntry); }
public NavigationEntryViewModel(IViewModelDependencies dependencies, IZetboxContext dataCtx, ViewModel parent, NavigationEntry screen) : base(dependencies, dataCtx, parent, screen) { if (screen == null) throw new ArgumentNullException("screen"); if (CurrentIdentity == null) throw new UnresolvableIdentityException(); if (screen.Groups.Count != 0 && !CurrentIdentity.IsAdmininistrator() && !screen.Groups.Any(g => CurrentIdentity.Groups.Any(grp => grp.ExportGuid == g.ExportGuid))) throw new InvalidOperationException("The current identity is not allowed to see this screen. The screen should not be displayed! Check your filters."); _screen = screen; _screen.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(_screen_PropertyChanged); }
private static void CallRecursivelyWithPropertyValue(DbContext context, NavigationEntry navigation, dynamic value) { if (navigation.Metadata.IsCollection()) { foreach (dynamic item in value) { LoadAllPropetiesRecursively(context, item); } } else { LoadAllPropetiesRecursively(context, navigation.CurrentValue); } }
public static void OnNavigationChanged(NavigationEntry navigation) { if (navigation.IsModified && navigation.CurrentValue == null && navigation.Metadata is INavigation metadata) { foreach (var property in metadata.ForeignKey.Properties) { var foreignKey = navigation.EntityEntry.Property(property.Name); if (foreignKey.Metadata.IsNullable && foreignKey.CurrentValue != null) { foreignKey.CurrentValue = null; } } } }
internal bool RemoveEntry(NavigationEntry entry, bool notify = true) { try { if (Stack.Contains(entry)) { Stack.Remove(entry); if (notify && OnFormRemoved != null) { OnFormRemoved(this, entry); } return(true); } } catch (Exception e) { Function.Log(e.ToString()); } return(false); }
private bool ShouldLoad(object entity, string navigationName, out NavigationEntry entry) { if (_disposed) { Logger.LazyLoadOnDisposedContextWarning(Context, entity, navigationName); } else if (Context.ChangeTracker.LazyLoadingEnabled) { entry = Context.Entry(entity).Navigation(navigationName); if (!entry.IsLoaded) { Logger.NavigationLazyLoading(Context, entity, navigationName); return(true); } } entry = null; return(false); }
public NavigationEntryViewModel(IViewModelDependencies dependencies, IZetboxContext dataCtx, ViewModel parent, NavigationEntry screen) : base(dependencies, dataCtx, parent, screen) { if (screen == null) { throw new ArgumentNullException("screen"); } if (CurrentIdentity == null) { throw new UnresolvableIdentityException(); } if (screen.Groups.Count != 0 && !CurrentIdentity.IsAdmininistrator() && !screen.Groups.Any(g => CurrentIdentity.Groups.Any(grp => grp.ExportGuid == g.ExportGuid))) { throw new InvalidOperationException("The current identity is not allowed to see this screen. The screen should not be displayed! Check your filters."); } _screen = screen; _screen.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(_screen_PropertyChanged); }
private bool ShouldLoad(object entity, string navigationName, out NavigationEntry navigationEntry) { if (_loadedStates != null && _loadedStates.TryGetValue(navigationName, out var loaded) && loaded) { navigationEntry = null; return(false); } if (_disposed) { Logger.LazyLoadOnDisposedContextWarning(Context, entity, navigationName); } else if (Context.ChangeTracker.LazyLoadingEnabled) { // Set early to avoid recursive loading overflow SetLoaded(entity, navigationName, loaded: true); var entityEntry = Context.Entry(entity); // Will use local-DetectChanges, if enabled. var tempNavigationEntry = entityEntry.Navigation(navigationName); if (entityEntry.State == EntityState.Detached) { Logger.DetachedLazyLoadingWarning(Context, entity, navigationName); } else if (!tempNavigationEntry.IsLoaded) { Logger.NavigationLazyLoading(Context, entity, navigationName); navigationEntry = tempNavigationEntry; return(true); } } navigationEntry = null; return(false); }
public void SetData(List <T> data, T selectedEntry) { tabs.Clear(); foreach (var entry in data) { var button = Instantiate(prefab, container); var navEntry = new NavigationEntry(entry, button); button.onClick.AddListener(() => Select(navEntry)); button.transform.GetChild(0).GetComponent <TextMeshProUGUI>().text = entry.Title; tabs.Add(navEntry); if (entry == selectedEntry) { Select(navEntry); } } if (tabs.All(tabs => !tabs.isSelected)) { throw new System.Exception("Navigation instantiated without selecting an entry!"); } }
public static void Work_with_a_single_navigation_2() { Console.WriteLine($">>>> Sample: {nameof(Work_with_a_single_navigation_2)}"); Console.WriteLine(); Helpers.RecreateCleanDatabase(); Helpers.PopulateDatabase(); using var context = new BlogsContext(); var blog = context.Blogs.Include(e => e.Posts).Single(e => e.Id == 1); #region Work_with_a_single_navigation_2a CollectionEntry <Blog, Post> collectionEntry1 = context.Entry(blog).Collection(e => e.Posts); CollectionEntry <Blog, Post> collectionEntry2 = context.Entry(blog).Collection <Post>("Posts"); CollectionEntry collectionEntry3 = context.Entry(blog).Collection("Posts"); #endregion #region Work_with_a_single_navigation_2b NavigationEntry navigationEntry = context.Entry(blog).Navigation("Posts"); #endregion Console.WriteLine(); }
public static string ConstructTitleKey(NavigationEntry nav) { return nav.Module.Namespace + "." + nav.Title; }
public NavigationActionViewModel(IViewModelDependencies dependencies, IZetboxContext dataCtx, ViewModel parent, NavigationEntry screen) : base(dependencies, dataCtx, parent, screen) { }
private bool IsComplexType(string propertyName) { NavigationEntry entryMember = DbEntry.Member(propertyName) as NavigationEntry; return(entryMember != null); }
public static NavigationEntryViewModel Fetch(IViewModelFactory ModelFactory, IZetboxContext dataCtx, ViewModel parent, NavigationEntry screen) { if (ModelFactory == null) { throw new ArgumentNullException("ModelFactory"); } if (screen == null) { throw new ArgumentNullException("screen"); } return((NavigationEntryViewModel)dataCtx.GetViewModelCache(ModelFactory.PerfCounter).LookupOrCreate(screen, () => { if (screen.ViewModelDescriptor != null) { try { var t = screen.ViewModelDescriptor.ViewModelRef.AsType(true); return ModelFactory.CreateViewModel <NavigationEntryViewModel.Factory>(t).Invoke(dataCtx, parent, screen); } catch (Exception ex) { Logging.Client.WarnFormat("Unable to create ViewModel from Descriptor: {0}", ex); } } return (NavigationEntryViewModel)screen.GetDefaultViewModel(dataCtx, parent); })); }
public void Bootstrap() { var _fs = new Filesystem(Directory.GetCurrentDirectory()); Console.WriteLine("[I] Bootstrap..."); AccessProvider.ProviderResponse += Handle_Provider_Event; ServerProvider.ProviderResponse += Handle_Provider_Event; ClientProvider.ProviderResponse += Handle_Provider_Event; UserProvider.ProviderResponse += Handle_Provider_Event; NewsProvider.ProviderResponse += Handle_Provider_Event; NavigationProvider.ProviderResponse += Handle_Provider_Event; if (!Directory.Exists(Path.Combine(_fs.Root, "Providers"))) { Directory.CreateDirectory(Path.Combine(_fs.Root, "Providers")); Console.WriteLine("[I] Provider installation needed..., Bootstrapping them..."); } AccessProvider.Add(Guid.NewGuid(), new GroupEntry <Guid>() { Active = true, Name = "System", Level = ulong.MaxValue, Locked = true, Provider = AccessProvider.Name, }); AccessProvider.Add(Guid.NewGuid(), new GroupEntry <Guid>() { Active = true, Name = "Server-Administratoren", Level = byte.MaxValue, Locked = true, Provider = AccessProvider.Name, }); AccessProvider.Add(Guid.NewGuid(), new GroupEntry <Guid>() { Active = true, Name = "Server-Operatoren", Level = 250, Locked = true, Provider = AccessProvider.Name, }); AccessProvider.Add(Guid.NewGuid(), new GroupEntry <Guid>() { Active = true, Name = "Seiten-Administroren", Level = 245, Locked = true, Provider = AccessProvider.Name, }); AccessProvider.Add(Guid.NewGuid(), new GroupEntry <Guid>() { Active = true, Name = "Seiten-Operatoren", Level = 240, Locked = true, Provider = AccessProvider.Name, }); AccessProvider.Add(Guid.NewGuid(), new GroupEntry <Guid>() { Active = true, Name = "News-Administratoren", Level = 235, Locked = true, Provider = AccessProvider.Name, }); AccessProvider.Add(Guid.NewGuid(), new GroupEntry <Guid>() { Active = true, Name = "News-Operatoren", Level = 230, Locked = true, Provider = AccessProvider.Name, }); AccessProvider.Add(Guid.NewGuid(), new GroupEntry <Guid>() { Active = true, Name = "Sendeplan-Administratoren", Level = 225, Locked = true, Provider = AccessProvider.Name, }); AccessProvider.Add(Guid.NewGuid(), new GroupEntry <Guid>() { Active = true, Name = "Sendeplan-Operatoren", Level = 220, Locked = true, Provider = AccessProvider.Name, }); AccessProvider.Add(Guid.NewGuid(), new GroupEntry <Guid>() { Active = true, Name = "Stream-Administratoren", Level = 215, Locked = true, Provider = AccessProvider.Name, }); AccessProvider.Add(Guid.NewGuid(), new GroupEntry <Guid>() { Active = true, Name = "Stream-Operatoren", Level = 210, Locked = true, Provider = AccessProvider.Name, }); AccessProvider.Add(Guid.NewGuid(), new GroupEntry <Guid>() { Active = true, Name = "Seiten-Mitglied", Level = 1, Locked = true, Provider = AccessProvider.Name, }); AccessProvider.Add(Guid.NewGuid(), new GroupEntry <Guid>() { Active = true, Name = "Unregistriert", Level = byte.MinValue, Locked = true, Provider = AccessProvider.Name, }); #region "News Provider - Installation" var news_user = Guid.Empty; var xmlDoc = new XmlDocument(); xmlDoc.Load(NewsProvider.InstallScript); var newsEntries = xmlDoc.SelectNodes("Namiono/Install/Users/User"); for (var i = 0; i < newsEntries.Count; i++) { var res_level = ulong.MinValue; var user = new UserEntry <Guid> { Id = newsEntries[i].Attributes["Id"] == null?Guid.NewGuid() : Guid.Parse(newsEntries[i].Attributes["Id"].Value), Name = newsEntries[i].Attributes["Name"].Value, Service = bool.Parse(newsEntries[i].Attributes["Service"].Value == "0" ? "false" : "true"), Moderator = bool.Parse(newsEntries[i].Attributes["Moderator"].Value == "0" ? "false" : "true"), Locked = bool.Parse(newsEntries[i].Attributes["Locked"].Value == "0" ? "false" : "true"), Password = MD5.GetMD5Hash(newsEntries[i].Attributes["Password"].Value), Provider = UserProvider.Name }; if (newsEntries[i].Attributes["Level"] != null) { ulong.TryParse(newsEntries[i].Attributes["Level"].Value, out res_level); user.Level = res_level; } news_user = user.Id; UserProvider.Add(user.Id, user); } newsEntries = xmlDoc.SelectNodes("Namiono/Install/Entries/Entry"); for (var i = 0; i < newsEntries.Count; i++) { var res_level = ulong.MinValue; var news = new NewsEntry <Guid> { Name = newsEntries[i].Attributes["Name"].Value, Service = bool.Parse(newsEntries[i].Attributes["Service"].Value == "0" ? "false" : "true"), Moderator = bool.Parse(newsEntries[i].Attributes["Moderator"].Value == "0" ? "false" : "true"), Locked = bool.Parse(newsEntries[i].Attributes["Locked"].Value == "0" ? "false" : "true"), OutPut = newsEntries[i].Attributes["Output"].Value.Replace("[[NL]]", "<br />"), Url = newsEntries[i].Attributes["Url"].Value, Author = news_user }; if (newsEntries[i].Attributes["Level"] != null) { ulong.TryParse(newsEntries[i].Attributes["Level"].Value, out res_level); news.Level = res_level; } NewsProvider.Add(Guid.NewGuid(), news); } #endregion #region "Navigation Provider - Installation" xmlDoc.Load(NavigationProvider.InstallScript); var navEntries = xmlDoc.SelectNodes("Namiono/Install/Entries/Entry"); for (var i = 0; i < navEntries.Count; i++) { var res_level = ulong.MinValue; var nav = new NavigationEntry <Guid> { Name = navEntries[i].Attributes["Name"].Value, Service = bool.Parse(navEntries[i].Attributes["Service"].Value == "0" ? "false" : "true"), Moderator = bool.Parse(navEntries[i].Attributes["Moderator"].Value == "0" ? "false" : "true"), Locked = bool.Parse(navEntries[i].Attributes["Locked"].Value == "0" ? "false" : "true"), OutPut = navEntries[i].Attributes["Output"].Value.Replace("[[NL]]", "<br />"), Url = navEntries[i].Attributes["Url"].Value, Author = Guid.Empty }; if (navEntries[i].Attributes["Level"] != null) { ulong.TryParse(navEntries[i].Attributes["Level"].Value, out res_level); nav.Level = res_level; } NavigationProvider.Add(Guid.NewGuid(), nav); } NavigationProvider.Add(Guid.NewGuid(), new NavigationEntry <Guid>() { Name = "Mitglieder", Active = true, Locked = false, Level = 1, Frame = "#content", Provider = UserProvider.Name, Action = "show" }); NavigationProvider.Add(Guid.NewGuid(), new NavigationEntry <Guid>() { Name = "News", Active = true, Locked = false, Level = 1, Frame = "#content", Provider = NewsProvider.Name, Action = "show" }); #endregion AccessProvider.Bootstrap(); ServerProvider.Bootstrap(); ClientProvider.Bootstrap(); UserProvider.Bootstrap(); NewsProvider.Bootstrap(); NavigationProvider.Bootstrap(); Console.WriteLine("[I] Starting ..."); }
private void CallThisMethodRecusivelyWithChildEntity(DbContext context, NavigationEntry property, HashSet <EntityKeys> alreadyTraversed) { EntityEntry entry = context.Entry(property.CurrentValue); RemoveEntitiesNotInUpdateRecusively(context, entry, alreadyTraversed); }
public NavigationEntryEditorViewModel(IViewModelDependencies appCtx, IZetboxContext dataCtx, ViewModel parent, NavigationEntry navEntry) : base(appCtx, dataCtx, parent) { this.NavEntry = navEntry; }
public static NavigationEntryViewModel Fetch(IViewModelFactory ModelFactory, IZetboxContext dataCtx, ViewModel parent, NavigationEntry screen) { if (ModelFactory == null) throw new ArgumentNullException("ModelFactory"); if (screen == null) throw new ArgumentNullException("screen"); return (NavigationEntryViewModel)dataCtx.GetViewModelCache(ModelFactory.PerfCounter).LookupOrCreate(screen, () => { if (screen.ViewModelDescriptor != null) { try { var t = Type.GetType(screen.ViewModelDescriptor.ViewModelTypeRef, true); return ModelFactory.CreateViewModel<NavigationEntryViewModel.Factory>(t).Invoke(dataCtx, parent, screen); } catch (Exception ex) { Logging.Client.WarnFormat("Unable to create ViewModel from Descriptor: {0}", ex); } } return (NavigationEntryViewModel)screen.GetDefaultViewModel(dataCtx, parent); }); }
public static string ConstructColorKey(NavigationEntry nav) { return nav.Module.Namespace + "." + nav.Title + "_color"; }