Skip to content

Commit 848ae52

Browse files
committed
Improve autocomplete function
1 parent cdd1e17 commit 848ae52

File tree

5 files changed

+182
-71
lines changed

5 files changed

+182
-71
lines changed

IPConfig/Models/EditableIPConfigModel.cs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
namespace IPConfig.Models;
1515

1616
public partial class EditableIPConfigModel : IPConfigModel,
17-
IDeepCloneTo<EditableIPConfigModel>,
17+
IDeepCloneable<EditableIPConfigModel>, IDeepCloneTo<EditableIPConfigModel>,
1818
IEditableObject, IRevertibleChangeTracking
1919
{
2020
private IPConfigModel _backup = IPConfigModel.Empty;
@@ -23,6 +23,11 @@ public partial class EditableIPConfigModel : IPConfigModel,
2323

2424
public static new EditableIPConfigModel Empty => new("");
2525

26+
/// <summary>
27+
/// 获取备份对象的副本。
28+
/// </summary>
29+
public IPConfigModel Backup => _backup.DeepClone();
30+
2631
[JsonIgnore]
2732
public int Order { get; set; } = -1;
2833

@@ -100,6 +105,18 @@ protected override void OnPropertyChanged(PropertyChangedEventArgs e)
100105
}
101106
}
102107

108+
#region IDeepCloneable
109+
110+
public new EditableIPConfigModel DeepClone()
111+
{
112+
var clone = Empty;
113+
DeepCloneTo(clone);
114+
115+
return clone;
116+
}
117+
118+
#endregion IDeepCloneable
119+
103120
#region IDeepCloneTo
104121

105122
public void DeepCloneTo(EditableIPConfigModel other)
@@ -118,7 +135,8 @@ public void BeginEdit()
118135
{
119136
if (!_inTxn)
120137
{
121-
DeepCloneTo(_backup);
138+
_backup = DeepClone();
139+
OnPropertyChanged(nameof(Backup));
122140
_inTxn = true;
123141
OnPropertyChanged(nameof(IsChanged));
124142
}
@@ -139,6 +157,7 @@ public void EndEdit()
139157
if (_inTxn)
140158
{
141159
_backup = Empty;
160+
OnPropertyChanged(nameof(Backup));
142161
_inTxn = false;
143162
OnPropertyChanged(nameof(IsChanged));
144163
}

IPConfig/Models/IPConfigModel.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ namespace IPConfig.Models;
1818
/// 表示一个 IP 配置。
1919
/// <para>MVVM Toolkit 源生成器暂不支持 <seealso cref="JsonIgnoreAttribute"/> 等其他特性,可以使用传统的完整属性(SetProperty)代替。</para>
2020
/// </summary>
21-
public partial class IPConfigModel : ObservableValidator, IDeepCloneTo<IPConfigModel>
21+
public partial class IPConfigModel : ObservableValidator, IDeepCloneable<IPConfigModel>, IDeepCloneTo<IPConfigModel>
2222
{
2323
private IPv4Config _iPv4Config = new();
2424

@@ -109,6 +109,18 @@ public static IPConfigModel GetUntitledWith(int order)
109109
IPv4Config.ClearErrors(propertyName);
110110
}
111111

112+
#region IDeepCloneable
113+
114+
public IPConfigModel DeepClone()
115+
{
116+
var clone = Empty;
117+
DeepCloneTo(clone);
118+
119+
return clone;
120+
}
121+
122+
#endregion IDeepCloneable
123+
112124
#region IDeepCloneTo
113125

114126
public void DeepCloneTo(IPConfigModel other)

0 commit comments

Comments
 (0)