添加画布信息视图

This commit is contained in:
fengjiayi
2025-05-27 23:46:06 +08:00
parent d055add74c
commit f7cae3493f
33 changed files with 532 additions and 155 deletions

View File

@@ -0,0 +1,41 @@
using CommunityToolkit.Mvvm.ComponentModel;
using Serein.Library;
using Serein.Workbench.Services;
using Serein.Workbench.Views;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Serein.Workbench.ViewModels
{
internal partial class CanvasInfoViewModel : ObservableObject
{
private readonly FlowNodeService flowNodeService;
/// <summary>
/// 画布数据实体
/// </summary>
[ObservableProperty]
private FlowCanvasDetails _model;
public CanvasInfoViewModel(FlowNodeService flowNodeService)
{
this.flowNodeService = flowNodeService;
this.flowNodeService.OnViewCanvasChanged += OnViewCanvasChanged;
}
/// <summary>
/// 查看的画布发生改变
/// </summary>
/// <param name="flowCanvas"></param>
private void OnViewCanvasChanged(FlowCanvasView flowCanvas)
{
if (flowCanvas.DataContext is FlowCanvasViewModel vm)
{
Model = vm.Model;
}
}
}
}

View File

@@ -22,8 +22,11 @@ namespace Serein.Workbench.ViewModels
/// </summary>
public partial class FlowEditViewModel : ObservableObject
{
public ObservableCollection<FlowEditorTabModel> CanvasTabs { get; set; } = [];
/// <summary>
/// 画布集合
/// </summary>
[ObservableProperty]
private ObservableCollection<FlowEditorTabModel> _canvasTabs = [];
/// <summary>
/// 当前选择的画布
@@ -42,11 +45,8 @@ namespace Serein.Workbench.ViewModels
flowNodeService.OnRemoveFlowCanvasView += OnRemoveFlowCanvasView; // 移除了画布
this.PropertyChanged += OnPropertyChanged;
}
private void OnPropertyChanged(object? value, PropertyChangedEventArgs e)
{
if (this.SelectedTab is null) return;
@@ -56,9 +56,13 @@ namespace Serein.Workbench.ViewModels
#region
private void OnCreateFlowCanvasView(FlowCanvasView canvas)
{
var model = new FlowEditorTabModel(canvas);
CanvasTabs.Add(model);
SelectedTab = model;
var tab = new FlowEditorTabModel(canvas);
if(canvas is IFlowCanvas flowCanvas)
{
tab.Model = flowCanvas.Model;
}
CanvasTabs.Add(tab);
SelectedTab = tab;
}
private void OnRemoveFlowCanvasView(FlowCanvasView canvas)
{
@@ -102,7 +106,7 @@ namespace Serein.Workbench.ViewModels
if (tab != null)
{
tab.IsEditing = false;
if(tab.Name != newName && !string.IsNullOrWhiteSpace(newName)) tab.Name = newName; // 名称合法时设置新名称
if(tab.Model.Name != newName && !string.IsNullOrWhiteSpace(newName)) tab.Model.Name = newName; // 名称合法时设置新名称
OnPropertyChanged(nameof(CanvasTabs)); // 刷新Tabs集合
}
}

View File

@@ -15,25 +15,18 @@ namespace Serein.Workbench.ViewModels
ServiceProvider = serviceProvider;
}
//private IServiceProvider GetService()
//{
// var service = new ServiceCollection();
// service.AddSingleton<MainViewModel>();
// service.AddSingleton<MainMenuBarViewModel>();
// service.AddSingleton<FlowWorkbenchViewModel>();
// service.AddSingleton<BaseNodesViewModel>();
// service.AddSingleton<FlowLibrarysViewModel>();
// service.AddTransient<FlowLibraryMethodDetailssViewModel>();
// return service.BuildServiceProvider();
//}
public MainViewModel MainViewModel => App.GetService<MainViewModel>() ?? throw new NotImplementedException();
public MainMenuBarViewModel MainMenuBarViewModel => App.GetService<MainMenuBarViewModel>() ?? throw new NotImplementedException();
public FlowWorkbenchViewModel FlowWorkbenchViewModel => App.GetService<FlowWorkbenchViewModel>() ?? throw new NotImplementedException();
public BaseNodesViewModel BaseNodesViewModel => App.GetService<BaseNodesViewModel>() ?? throw new NotImplementedException();
public FlowLibrarysViewModel FlowLibrarysViewModel => App.GetService<FlowLibrarysViewModel>() ?? throw new NotImplementedException();
public FlowEditViewModel FlowEditViewModel => App.GetService<FlowEditViewModel>() ?? throw new NotImplementedException();
public FlowCanvasViewModel FlowCanvasViewModel => App.GetService<FlowCanvasViewModel>() ?? throw new NotImplementedException();
public CanvasInfoViewModel CanvasNodeTreeViewModel => App.GetService<CanvasInfoViewModel>() ?? throw new NotImplementedException();
public IServiceProvider ServiceProvider { get; }
}