Skip to content

Commit d7ce553

Browse files
committed
Fix UI interaction bug
1 parent b6645ae commit d7ce553

File tree

2 files changed

+27
-15
lines changed

2 files changed

+27
-15
lines changed

IPConfig/Models/EditableIPConfigModel.cs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313

1414
namespace IPConfig.Models;
1515

16-
public partial class EditableIPConfigModel : IPConfigModel, IDeepCloneTo<EditableIPConfigModel>, IEditableObject, IRevertibleChangeTracking
16+
public partial class EditableIPConfigModel : IPConfigModel,
17+
IDeepCloneTo<EditableIPConfigModel>,
18+
IEditableObject, IRevertibleChangeTracking
1719
{
1820
private IPConfigModel _backup = IPConfigModel.Empty;
1921

@@ -24,7 +26,9 @@ public partial class EditableIPConfigModel : IPConfigModel, IDeepCloneTo<Editabl
2426
[JsonIgnore]
2527
public int Order { get; set; } = -1;
2628

27-
public event PropertyChangedEventHandler? EditableChanged;
29+
public event EventHandler<bool>? EditableChanged;
30+
31+
public event PropertyChangedEventHandler? EditablePropertyChanged;
2832

2933
[BsonCtor]
3034
public EditableIPConfigModel(string name) : base(name)
@@ -37,18 +41,20 @@ public bool IsPropertyChanged<T>(Func<IPConfigModel, T> property) where T : notn
3741

3842
public bool IsPropertyChanged<T>(Func<IPConfigModel, T> property, [NotNullWhen(true)] out T? oldValue) where T : notnull
3943
{
44+
var prop = property(this);
45+
4046
if (!_inTxn)
4147
{
42-
oldValue = default;
48+
oldValue = prop;
4349

4450
return false;
4551
}
4652

4753
var backup = property(_backup);
4854

49-
if (EqualityComparer<T>.Default.Equals(property(this), backup))
55+
if (EqualityComparer<T>.Default.Equals(prop, backup))
5056
{
51-
oldValue = default;
57+
oldValue = prop;
5258

5359
return false;
5460
}
@@ -86,7 +92,11 @@ protected override void OnPropertyChanged(PropertyChangedEventArgs e)
8692
if (e.PropertyName != nameof(IsChanged))
8793
{
8894
OnPropertyChanged(nameof(IsChanged));
89-
EditableChanged?.Invoke(this, e);
95+
EditablePropertyChanged?.Invoke(this, e);
96+
}
97+
else
98+
{
99+
EditableChanged?.Invoke(this, IsChanged);
90100
}
91101
}
92102

IPConfig/ViewModels/IPConfigDetailViewModel.cs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,6 @@ public partial class IPConfigDetailViewModel : ObservableRecipient, IEditableObj
9090
private EditableIPConfigModel _editingIPConfig = IPConfigModel.Empty.AsEditable();
9191

9292
[ObservableProperty]
93-
[NotifyPropertyChangedFor(nameof(PrimarySaveOrApplyString),
94-
nameof(SecondarySaveOrApplyString),
95-
nameof(PrimarySaveOrApplyCommand),
96-
nameof(SecondarySaveOrApplyCommand))]
9793
private object _editingIPConfigSender = null!;
9894

9995
[ObservableProperty]
@@ -297,6 +293,7 @@ public void Receive(PropertyChangedMessage<EditableIPConfigModel?> message)
297293
EditingIPConfig.EditableChanged += EditingIPConfig_EditableChanged;
298294

299295
// 初始化页面状态。
296+
RaisePropertyChanged();
300297
CanShowChangedIndicator = false;
301298
CanShowUnchangedIndicator = false;
302299
}
@@ -658,12 +655,9 @@ partial void OnEditingIPConfigChanged([DisallowNull] EditableIPConfigModel? oldV
658655

659656
#region Event Handlers
660657

661-
private void EditingIPConfig_EditableChanged(object? sender, PropertyChangedEventArgs e)
658+
private void EditingIPConfig_EditableChanged(object? sender, bool e)
662659
{
663-
OnPropertyChanged(nameof(PrimarySaveOrApplyCommand));
664-
OnPropertyChanged(nameof(PrimarySaveOrApplyString));
665-
OnPropertyChanged(nameof(SecondarySaveOrApplyCommand));
666-
OnPropertyChanged(nameof(SecondarySaveOrApplyString));
660+
RaisePropertyChanged();
667661
}
668662

669663
private void EditingIPConfig_PropertyChanged(object? sender, PropertyChangedEventArgs e)
@@ -687,6 +681,14 @@ private void EditingIPConfig_PropertyChanged(object? sender, PropertyChangedEven
687681
}
688682
}
689683

684+
private void RaisePropertyChanged()
685+
{
686+
OnPropertyChanged(nameof(PrimarySaveOrApplyCommand));
687+
OnPropertyChanged(nameof(PrimarySaveOrApplyString));
688+
OnPropertyChanged(nameof(SecondarySaveOrApplyCommand));
689+
OnPropertyChanged(nameof(SecondarySaveOrApplyString));
690+
}
691+
690692
#endregion Event Handlers
691693

692694
#region Private Methods

0 commit comments

Comments
 (0)