69 lines
2.1 KiB
C#
Raw Normal View History

2025-04-01 13:41:50 +08:00
using Prism.Commands;
using Prism.Regions;
using System.Linq;
using Unity;
namespace RIZO.Client.Common
{
public abstract class ViewModelBase : INavigationAware
{
// * 未保存
public string PageTitle { get; set; } = "标签标题";
public bool IsCanClose { get; set; } = true;
private string NavUri { get; set; }
public DelegateCommand CloseCommand
{
get => new DelegateCommand(() =>
{
// 关闭操作
// 根据URI获取对应的已注册对象名称
var obj = _unityContainer.Registrations.FirstOrDefault(v => v.Name == NavUri);
string name = obj.MappedToType.Name;
// 根据对象名称再从Region的Views里面找到对象
if (!string.IsNullOrEmpty(name))
{
var region = _regionManager.Regions["MainContentRegion"];
var view = region.Views.FirstOrDefault(v => v.GetType().Name == name);
// 把这个对象从Region的Views里移除
if (view != null)
region.Remove(view);
}
});
}
public DelegateCommand RefreshCommand { get => new DelegateCommand(Refresh); }
public DelegateCommand AddCommand { get => new DelegateCommand(AddItem); }
public void OnNavigatedTo(NavigationContext navigationContext)
{
NavUri = navigationContext.Uri.ToString();
}
public bool IsNavigationTarget(NavigationContext navigationContext)
{
return true;
}
public void OnNavigatedFrom(NavigationContext navigationContext)
{
}
IUnityContainer _unityContainer;
IRegionManager _regionManager;
public ViewModelBase(IUnityContainer unityContainer, IRegionManager regionManager)
{
_unityContainer = unityContainer;
_regionManager = regionManager;
this.Refresh();
}
public virtual void Refresh() { }
public virtual void AddItem() { }
}
}