mirror of
http://git.xinwangdao.com/cnnc-embedded-parts-detect/detect.git
synced 2025-06-24 21:44:12 +08:00
88 lines
2.7 KiB
C#
88 lines
2.7 KiB
C#
using System.Collections.Generic;
|
|
using detect.gui.Commons;
|
|
using ReactiveUI;
|
|
using System.Linq;
|
|
|
|
namespace detect.gui.Classes;
|
|
|
|
public class ViewModelItem
|
|
{
|
|
private readonly RoutingState _router;
|
|
|
|
public string? ViewModelTypeName { get; init; }
|
|
public string? Text { get; init; }
|
|
public ViewModelItem? Parent { get; init; }
|
|
public List<ViewModelItem> Children { get; set; } = new List<ViewModelItem>();
|
|
public bool IsAuto { get; init; }
|
|
public bool IsActived { get; set; }
|
|
|
|
public object? Param { get; set; }
|
|
|
|
public ViewModelItem(RoutingState router)
|
|
{
|
|
_router = router;
|
|
}
|
|
|
|
public void Goto(object? param = null)
|
|
{
|
|
var v = RouterHelper.GetViewModel(ViewModelTypeName!);
|
|
if (v == null) return;
|
|
|
|
IsActived = true;
|
|
|
|
Parent?.Children.ForEach(i =>
|
|
{
|
|
if (ViewModelTypeName != i.ViewModelTypeName)
|
|
i.IsActived = false;
|
|
});
|
|
|
|
var count = _router.NavigationStack.Count(x => x.GetType().Name == ViewModelTypeName);
|
|
if (count != 0)
|
|
{
|
|
var r = _router.NavigationStack.First(x => x.GetType().Name == ViewModelTypeName);
|
|
v.GetType().GetProperty("Item")!.SetValue(r, param);
|
|
_router.NavigationStack.Remove(r);
|
|
_router.Navigate.Execute(r);
|
|
}
|
|
else
|
|
{
|
|
if (Parent != null)
|
|
{
|
|
Parent.IsActived = true;
|
|
var parentType = Parent.ViewModelTypeName?.GetTypeByName();
|
|
var parentModel = parentType?.Assembly.CreateInstance(parentType.FullName!);
|
|
if (parentModel != null)
|
|
{
|
|
_router.NavigationStack.Add((IRoutableViewModel)parentModel);
|
|
}
|
|
}
|
|
|
|
v.GetType().GetProperty("Item")!.SetValue(v, param);
|
|
_router.Navigate.Execute(v);
|
|
}
|
|
|
|
var child = Children.FirstOrDefault(x => x.IsActived);
|
|
if (child == null && Children.Any() && IsAuto)
|
|
Children[0].Goto();
|
|
else if (child != null && Children.Any())
|
|
{
|
|
var c = _router.NavigationStack.First(x => x.GetType().Name == child.ViewModelTypeName);
|
|
_router.NavigationStack.Remove(c);
|
|
_router.Navigate.Execute(c);
|
|
}
|
|
}
|
|
|
|
public void Goback()
|
|
{
|
|
IsActived = false;
|
|
|
|
var r = _router.NavigationStack.First(x => x.GetType().Name == ViewModelTypeName);
|
|
_router.NavigationStack.Remove(r);
|
|
|
|
if (Parent == null) return;
|
|
|
|
var p = _router.NavigationStack.First(x => x.GetType().Name == Parent.ViewModelTypeName);
|
|
_router.NavigationStack.Remove(p);
|
|
_router.Navigate.Execute(p);
|
|
}
|
|
} |