颜色,字体,支持redo undo

This commit is contained in:
艾竹
2023-04-08 23:38:01 +08:00
parent 8ad42aec49
commit 2ef5b7a1ed
6 changed files with 110 additions and 14 deletions

View File

@@ -29,23 +29,26 @@ namespace AIStudio.Wpf.DiagramDesigner
public SelectableViewModelBase(IDiagramViewModel root)
{
IsLoaded = false;
Init(root, true);
(FontViewModel as FontViewModel).PropertyChanged += FontViewModel_PropertyChanged;
IsLoaded = true;
}
public SelectableViewModelBase(IDiagramViewModel root, SelectableItemBase designer)
{
IsLoaded = false;
Init(root, false);
LoadDesignerItemViewModel(designer);
(FontViewModel as FontViewModel).PropertyChanged += FontViewModel_PropertyChanged;
IsLoaded = true;
}
public SelectableViewModelBase(IDiagramViewModel root, SerializableItem serializableItem, string serializableType)
{
IsLoaded = false;
Init(root, false);
SelectableItemBase obj = SerializeHelper.DeserializeObject(serializableItem.SerializableTypeName, serializableItem.SerializableString, serializableType);
LoadDesignerItemViewModel(obj);
(FontViewModel as FontViewModel).PropertyChanged += FontViewModel_PropertyChanged;
IsLoaded = true;
}
public virtual SerializableItem ToSerializableItem(string serializableType)
@@ -67,7 +70,7 @@ namespace AIStudio.Wpf.DiagramDesigner
}
protected virtual void Init(IDiagramViewModel root, bool initNew)
{
{
Root = root;
if (Root?.ColorViewModel != null)
@@ -103,6 +106,9 @@ namespace AIStudio.Wpf.DiagramDesigner
{
InitNew();
}
this.PropertyChanged -= Item_PropertyChanged;
this.PropertyChanged += Item_PropertyChanged;
}
protected virtual void InitNew()
@@ -123,6 +129,11 @@ namespace AIStudio.Wpf.DiagramDesigner
ShapeViewModel = CopyHelper.Mapper(designerbase.SharpItem);
}
protected bool IsLoaded
{
get;set;
}
public IDiagramViewModel Root
{
get; set;
@@ -299,7 +310,15 @@ namespace AIStudio.Wpf.DiagramDesigner
}
set
{
if (_colorViewModel != null)
{
_colorViewModel.PropertyChanged -= ColorViewModel_PropertyChanged;
}
SetProperty(ref _colorViewModel, value);
if (_colorViewModel != null)
{
_colorViewModel.PropertyChanged += ColorViewModel_PropertyChanged;
}
}
}
@@ -312,7 +331,15 @@ namespace AIStudio.Wpf.DiagramDesigner
}
set
{
if (_fontViewModel != null)
{
_fontViewModel.PropertyChanged -= FontViewModel_PropertyChanged;
}
SetProperty(ref _fontViewModel, value);
if (_fontViewModel != null)
{
_fontViewModel.PropertyChanged += FontViewModel_PropertyChanged;
}
}
}
@@ -325,7 +352,15 @@ namespace AIStudio.Wpf.DiagramDesigner
}
set
{
if (_shapeViewModel != null)
{
_shapeViewModel.PropertyChanged -= ShapeViewModel_PropertyChanged;
}
SetProperty(ref _shapeViewModel, value);
if (_shapeViewModel != null)
{
_shapeViewModel.PropertyChanged += ShapeViewModel_PropertyChanged;
}
}
}
@@ -384,14 +419,38 @@ namespace AIStudio.Wpf.DiagramDesigner
return IsReadOnly == false;
}
protected virtual void Item_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (IsLoaded == false) { return; }
}
protected virtual void FontViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (IsLoaded == false) { return; }
if (e.PropertyName == nameof(FontViewModel.FontCase))
{
RaisePropertyChanged("Text");
}
RaisePropertyChanged(sender, e);
}
protected virtual void ColorViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (IsLoaded == false) { return; }
RaisePropertyChanged(sender, e);
}
protected virtual void ShapeViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (IsLoaded == false) { return; }
RaisePropertyChanged(sender, e);
}
public override string ToString()
{
return $"{Id}-{Text}";