private ViewModelNavigationItem CreateNavigationItem(ViewModelInfo root) { var nav = new ViewModelNavigationItem(root); nav.OnNavigate += (sender, args) => SetAsCurrentVM(args.ViewModelInfo); return(nav); }
/// <summary> /// Set the targeted ViewModel /// </summary> public void SetViewModel(ViewModelInfo vm) { var type = vm.ViewModel.GetType(); Properties.Clear(); foreach (var prop in type.GetProperties().OrderBy(e => e.Name)) { IViewModelProperty property = null; if (prop.PropertyType == typeof(string)) { property = new StringViewModelProperty(vm.ViewModel, prop); } else if (prop.PropertyType == typeof(bool)) { property = new BoolViewModelProperty(vm.ViewModel, prop); } else if (prop.PropertyType == typeof(ICommand) || prop.PropertyType.GetInterfaces().Any(e => e == typeof(ICommand))) { property = new CommandViewModelProperty(vm.ViewModel, prop); } if (property == null) { property = new ObjectViewModelProperty(vm.ViewModel, prop); } property.ReadValue(); Properties.Add(property); } }
/// <summary> /// Register View and ViewModel without MessageRegister /// </summary> /// <typeparam name="TView">View's type</typeparam> /// <typeparam name="TViewModel">ViewModel's type</typeparam> /// <param name="token">ViewModel's token</param> public static void Register <TView, TViewModel>(string token = "") { var vmInfo = new ViewModelInfo( typeof(TView), typeof(TViewModel), token: token); _viewModelInfoList.Add(vmInfo); }
private ViewModelInfo GetViewModelInfo(string route, string pageText) { route = string.IsNullOrEmpty(route) ? "" : route.Substring(0, 1).ToUpper() + route.Substring(1); var info = new ViewModelInfo(route.ToLower(), route + "Vm"); var match = ExtractElement.Match(pageText); if (match.Success) { info.ElementName = NamingConverter.SnakeToPascalCase(route); if (!string.IsNullOrEmpty(match.Groups[2].Value)) { info.Bindings = match.Groups[2].Value .Split(',') .Select(b => b.Trim()) .ToList(); } info.VmName = null; info.SortIndex = 0; } else { match = ExtractName.Match(pageText); if (match.Success) { info.VmName = match.Groups[1].Value; } match = ExtractTitle.Match(pageText); if (match.Success) { info.Title = match.Groups[1].Value; info.SortIndex = (string.IsNullOrEmpty(match.Groups[3].Value)) ? 0 : int.Parse(match.Groups[3].Value); } else { info.Title = route; } } info.Visible = info.SortIndex > 0; info.SortIndex = Math.Abs(info.SortIndex); if (!string.IsNullOrEmpty(info.VmName)) { _viewModels.Add(info); } return(info); }
public virtual void Raise <TViewModel>(string viewName, ViewModelInfo context, Action <TViewModel> onAvailable) where TViewModel : class { Raised?.Invoke(this, new ViewInteractionRequestEventArgs( viewName, context, view => { if (onAvailable != null) { var viewModel = ViewModelContainerHelper.GetViewModelAs <TViewModel>(view); onAvailable.Invoke(viewModel); } }) ); }
private void SetAsCurrentVM(ViewModelInfo arg) { ViewModels.Clear(); NavigationStack.Clear(); CurrentViewModel = arg; ViewModels.Fill(arg.ChildViewModels.Select(CreateNavigationItem)); var item = arg; while (item != null) { NavigationStack.Insert(0, CreateNavigationItem(item)); item = item.ParentViewModel; } _mainpulator.SetViewModel(arg); }
public void Raise(string viewName, ViewModelInfo context) { Raised?.Invoke(this, new ViewInteractionRequestEventArgs(viewName, context, null)); }
public void Raise <TViewModel>(ViewModelInfo modelInfo, Action <TViewModel> availableCallback) where TViewModel : class { Raise(null, modelInfo, availableCallback); }
public virtual void Raise(ViewModelInfo modelInfo) { Raise(null, modelInfo); }
/// <inheritdoc /> public ViewModelNavigationItem(ViewModelInfo viewModelInfo) { ViewModelInfo = viewModelInfo; Name = viewModelInfo.ViewModel.__Name; }
public ViewInteractionRequestEventArgs(string viewName, ViewModelInfo info, Action <object> availableCallback) { ViewName = viewName; Info = info; AvailableCallback = availableCallback; }