diff --git a/Anamnesis/Actor/Pages/PosePage.xaml.cs b/Anamnesis/Actor/Pages/PosePage.xaml.cs index c0e95887..dbbc62a8 100644 --- a/Anamnesis/Actor/Pages/PosePage.xaml.cs +++ b/Anamnesis/Actor/Pages/PosePage.xaml.cs @@ -295,11 +295,13 @@ private async void OnDataContextChanged(object? sender, DependencyPropertyChange if (this.Actor?.ModelObject != null) { + this.Actor.Refreshed -= this.OnActorRefreshed; this.Actor.ModelObject.PropertyChanged -= this.OnModelObjectChanged; } if (newActor?.ModelObject != null) { + newActor.Refreshed += this.OnActorRefreshed; newActor.ModelObject.PropertyChanged += this.OnModelObjectChanged; } @@ -308,6 +310,12 @@ private async void OnDataContextChanged(object? sender, DependencyPropertyChange await this.Refresh(); } + private void OnActorRefreshed(object? sender, EventArgs e) + { + this.refreshDebounceTimer.Stop(); + this.refreshDebounceTimer.Start(); + } + private void OnModelObjectChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e) { if (e.PropertyName == nameof(ActorModelMemory.Skeleton)) diff --git a/Anamnesis/Actor/Posing/Views/Pose3DView.xaml b/Anamnesis/Actor/Posing/Views/Pose3DView.xaml index cfdce4f3..6ce0eec4 100644 --- a/Anamnesis/Actor/Posing/Views/Pose3DView.xaml +++ b/Anamnesis/Actor/Posing/Views/Pose3DView.xaml @@ -30,7 +30,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + - - - - - - - + + + + + - - - - - - - + + + + + + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + - - - - - - - + + + + + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Anamnesis/Memory/ActorMemory.cs b/Anamnesis/Memory/ActorMemory.cs index 19162b5a..fbb8815d 100644 --- a/Anamnesis/Memory/ActorMemory.cs +++ b/Anamnesis/Memory/ActorMemory.cs @@ -30,6 +30,8 @@ public ActorMemory() this.refreshDebounceTimer.Elapsed += async (s, e) => { await this.Refresh(); }; } + public event EventHandler? Refreshed; + public enum CharacterModes : byte { None = 0, @@ -200,6 +202,7 @@ public async Task Refresh() } this.OnPropertyChanged(nameof(this.IsHuman)); + this.OnRefreshed(); } public async Task BackupAsync() @@ -215,6 +218,11 @@ public void RaiseRefreshChanged() this.OnPropertyChanged(nameof(this.CanRefresh)); } + protected virtual void OnRefreshed() + { + this.Refreshed?.Invoke(this, EventArgs.Empty); + } + private void HandlePropertyChanged(object? sender, PropertyChangedEventArgs e) { if (e is not MemObjPropertyChangedEventArgs memObjEventArgs) diff --git a/Anamnesis/Memory/InplaceFixedArrayMemory.cs b/Anamnesis/Memory/InplaceFixedArrayMemory.cs index e8c709fd..fc78dbf5 100644 --- a/Anamnesis/Memory/InplaceFixedArrayMemory.cs +++ b/Anamnesis/Memory/InplaceFixedArrayMemory.cs @@ -7,7 +7,6 @@ namespace Anamnesis.Memory; using System; using System.Collections; using System.Collections.Generic; -using System.ComponentModel; /// /// Represents an inplace fixed-length array in memory. @@ -156,14 +155,6 @@ public virtual void ReadArrayMemory() } } - /// Called when a property of the object changes. - /// The sender of the event. - /// The event arguments. - protected override void OnSelfPropertyChanged(object? sender, PropertyChangedEventArgs e) - { - this.Synchronize(); - } - /// /// Represents binding information for an array element. ///