| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- using Prism.Commands;
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using TeamAAS.Communication.Models;
- namespace TeamAAS.ViewModels
- {
- /// <summary>
- /// 全局变量编辑器 VM(可复用)。在独立工作集 <see cref="Items"/> 上增删改移,
- /// 与 live GlobalVariableManager.Variables 解耦——配合“克隆-编辑-提交”,取消可回滚。
- /// 调用方指定 Scope(新建变量盖此作用域)与初始项(通常为某作用域的克隆)。
- /// DataContext 供 GlobalVarEditorView 绑定。
- /// </summary>
- public class GlobalVarEditorViewModel : TeamAAS.BindableBase
- {
- /// <summary>工作集(克隆),编辑不直接影响 live 列表;由调用方在确定时提交。</summary>
- public ObservableCollection<GlobalVariableModel> Items { get; }
- = new ObservableCollection<GlobalVariableModel>();
- /// <summary>本编辑器管理的作用域;新建变量盖此 Scope。</summary>
- public VarScope Scope { get; }
- /// <summary>可选变量类型(供类型下拉)。</summary>
- public Array VarTypes => GlobalVariableTypes.AllTypes;
- private GlobalVariableModel _selected;
- public GlobalVariableModel Selected
- {
- get => _selected;
- set
- {
- if (SetProperty(ref _selected, value))
- {
- DeleteCommand?.RaiseCanExecuteChanged();
- MoveUpCommand?.RaiseCanExecuteChanged();
- MoveDownCommand?.RaiseCanExecuteChanged();
- }
- }
- }
- public bool HasSelected => _selected != null;
- public DelegateCommand<string> AddCommand { get; }
- public DelegateCommand DeleteCommand { get; }
- public DelegateCommand MoveUpCommand { get; }
- public DelegateCommand MoveDownCommand { get; }
- public GlobalVarEditorViewModel(VarScope scope, IEnumerable<GlobalVariableModel> initial)
- {
- Scope = scope;
- if (initial != null)
- foreach (var v in initial) Items.Add(v);
- Reindex();
- AddCommand = new DelegateCommand<string>(Add);
- DeleteCommand = new DelegateCommand(Delete, () => HasSelected);
- MoveUpCommand = new DelegateCommand(MoveUp, () => HasSelected);
- MoveDownCommand = new DelegateCommand(MoveDown, () => HasSelected);
- }
- private void Add(string dataType)
- {
- if (string.IsNullOrEmpty(dataType)) return;
- Items.Add(GlobalVariableModel.Create(dataType, Scope, Items.Count));
- }
- private void Delete()
- {
- if (_selected == null) return;
- Items.Remove(_selected);
- Selected = null;
- Reindex();
- }
- private void MoveUp()
- {
- if (_selected == null) return;
- int i = Items.IndexOf(_selected);
- if (i <= 0) return;
- Items.Move(i, i - 1);
- Reindex();
- }
- private void MoveDown()
- {
- if (_selected == null) return;
- int i = Items.IndexOf(_selected);
- if (i < 0 || i >= Items.Count - 1) return;
- Items.Move(i, i + 1);
- Reindex();
- }
- private void Reindex()
- {
- for (int i = 0; i < Items.Count; i++) Items[i].Index = i;
- }
- }
- }
|