diff --git a/Hyperbar.Windows.MediaController/Lifecycles/MediaControllerHandler.cs b/Hyperbar.Windows.MediaController/Lifecycles/MediaControllerHandler.cs index 0fcf96e..3a1d42c 100644 --- a/Hyperbar.Windows.MediaController/Lifecycles/MediaControllerHandler.cs +++ b/Hyperbar.Windows.MediaController/Lifecycles/MediaControllerHandler.cs @@ -22,8 +22,8 @@ public class MediaControllerHandler(IMediator mediator, if (factory.Create(mediaController) is MediaControllerViewModel mediaControllerViewModel) { cache.Add(mediaController, mediaControllerViewModel); - await mediator.PublishAsync(new Created(mediaControllerViewModel), - cancellationToken); + //await mediator.PublishAsync(new Created(mediaControllerViewModel), + // cancellationToken); } } } diff --git a/Hyperbar.Windows.MediaController/Lifecycles/MediaControllerManager.cs b/Hyperbar.Windows.MediaController/Lifecycles/MediaControllerManager.cs index 2d464b7..92d9ef9 100644 --- a/Hyperbar.Windows.MediaController/Lifecycles/MediaControllerManager.cs +++ b/Hyperbar.Windows.MediaController/Lifecycles/MediaControllerManager.cs @@ -29,7 +29,7 @@ public class MediaControllerManager(IMediator mediator, { if (factory.Create(session) is MediaController mediaController) { - await mediator.PublishAsync(new Created(mediaController)); + //await mediator.PublishAsync(new Created(mediaController)); cache.Add(new KeyValuePair(session, mediaController)); } } diff --git a/Hyperbar.Windows.Primary/PrimaryWidgetConfigurationHandler.cs b/Hyperbar.Windows.Primary/PrimaryWidgetConfigurationHandler.cs index a15eae4..b3efd67 100644 --- a/Hyperbar.Windows.Primary/PrimaryWidgetConfigurationHandler.cs +++ b/Hyperbar.Windows.Primary/PrimaryWidgetConfigurationHandler.cs @@ -25,8 +25,9 @@ public class PrimaryWidgetConfigurationHandler(IMediator mediator, { if (factory.Create(item) is IWidgetComponentViewModel value) { - await mediator.PublishAsync(new Created(value), - cancellationToken); + await mediator.PublishAsync(Inserted + .For(item.Order, value), + cancellationToken); } } } diff --git a/Hyperbar/Views/Created.cs b/Hyperbar/Views/Created.cs index 2e8c597..718532e 100644 --- a/Hyperbar/Views/Created.cs +++ b/Hyperbar/Views/Created.cs @@ -1,5 +1,16 @@ namespace Hyperbar; -public record Created(TValue Value) : INotification; - -public record Inserted(int Index, TValue Value) : INotification; \ No newline at end of file +public record Created(TValue Value, object Target) : INotification +{ + public static Created For(TValue value) + { + return new Created(value, typeof(TTarget).Name); + } +} +public record Inserted(int Index, TValue Value, object Target) : INotification +{ + public static Inserted For(int index, TValue value) + { + return new Inserted(index, value, typeof(TTarget).Name); + } +} \ No newline at end of file diff --git a/Hyperbar/Views/ObservableCollectionViewModel.cs b/Hyperbar/Views/ObservableCollectionViewModel.cs index 62aaa57..0ddace7 100644 --- a/Hyperbar/Views/ObservableCollectionViewModel.cs +++ b/Hyperbar/Views/ObservableCollectionViewModel.cs @@ -11,6 +11,7 @@ public partial class ObservableCollectionViewModel : IObservableCollectionViewModel, INotificationHandler>, INotificationHandler>, + INotificationHandler>, IDisposable where TItem : IDisposable @@ -228,16 +229,33 @@ public partial class ObservableCollectionViewModel : public ValueTask Handle(Created notification, CancellationToken cancellationToken) { - if (notification.Value is not null) + if (notification.Target.Equals(GetType().Name)) { - Add(notification.Value); + if (notification.Value is TItem item) + { + Add(item); + } } return ValueTask.CompletedTask; } - public int IndexOf(TItem item) => - collection.IndexOf(item); + public ValueTask Handle(Inserted notification, + CancellationToken cancellationToken) + { + if (notification.Target.Equals(GetType().Name)) + { + if (notification.Value is TItem item) + { + Insert(notification.Index, item); + } + } + + return ValueTask.CompletedTask; + } + + public int IndexOf(TItem item) => + collection.IndexOf(item); int IList.IndexOf(object? value) => IsCompatibleObject(value) ?