WIP
This commit is contained in:
@@ -6,40 +6,6 @@ using System.Reactive.Disposables;
|
||||
|
||||
namespace Toolkit.Foundation;
|
||||
|
||||
public interface IIndexable
|
||||
{
|
||||
int Index { get; }
|
||||
}
|
||||
|
||||
public interface ICollectionSynchronization<TItem>
|
||||
where TItem : notnull
|
||||
{
|
||||
int IndexOf(TItem item);
|
||||
}
|
||||
|
||||
public interface ICollectionSynchronizer
|
||||
{
|
||||
void Set<TItem>(ICollectionSynchronization<TItem> collection)
|
||||
where TItem : notnull;
|
||||
}
|
||||
|
||||
public class CollectionSynchronizer(IServiceProvider serviceProvider) :
|
||||
ICollectionSynchronizer
|
||||
{
|
||||
private readonly IServiceProvider serviceProvider = serviceProvider;
|
||||
|
||||
public void Set<TItem>(ICollectionSynchronization<TItem> collection)
|
||||
where TItem : notnull
|
||||
{
|
||||
if (serviceProvider.GetService<IDecoratorService<ICollectionSynchronization<TItem>>>()
|
||||
is IDecoratorService<ICollectionSynchronization<TItem>> decoratorService)
|
||||
{
|
||||
decoratorService.Set(collection);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public partial class ObservableCollection<TItem> :
|
||||
ObservableObject,
|
||||
IObservableCollectionViewModel<TItem>,
|
||||
@@ -52,7 +18,7 @@ public partial class ObservableCollection<TItem> :
|
||||
IList,
|
||||
IReadOnlyList<TItem>,
|
||||
INotifyCollectionChanged,
|
||||
ICollectionSynchronization<TItem>,
|
||||
ISynchronizationCollection<TItem>,
|
||||
IServiceProviderRequired,
|
||||
IServiceFactoryRequired,
|
||||
IMediatorRequired,
|
||||
@@ -89,16 +55,13 @@ public partial class ObservableCollection<TItem> :
|
||||
[ObservableProperty]
|
||||
private TItem? selectedItem;
|
||||
|
||||
public ObservableCollection(ICollectionSynchronizer synchronizer,
|
||||
IServiceProvider provider,
|
||||
public ObservableCollection(IServiceProvider provider,
|
||||
IServiceFactory factory,
|
||||
IMediator mediator,
|
||||
IPublisher publisher,
|
||||
ISubscription subscriber,
|
||||
IDisposer disposer)
|
||||
{
|
||||
synchronizer.Set(this);
|
||||
|
||||
Provider = provider;
|
||||
Factory = factory;
|
||||
Mediator = mediator;
|
||||
@@ -111,8 +74,7 @@ public partial class ObservableCollection<TItem> :
|
||||
collection.CollectionChanged += OnCollectionChanged;
|
||||
}
|
||||
|
||||
public ObservableCollection(ICollectionSynchronizer synchronizer,
|
||||
IServiceProvider provider,
|
||||
public ObservableCollection(IServiceProvider provider,
|
||||
IServiceFactory factory,
|
||||
IMediator mediator,
|
||||
IPublisher publisher,
|
||||
@@ -120,8 +82,6 @@ public partial class ObservableCollection<TItem> :
|
||||
IDisposer disposer,
|
||||
IEnumerable<TItem> items)
|
||||
{
|
||||
synchronizer.Set(this);
|
||||
|
||||
Provider = provider;
|
||||
Factory = factory;
|
||||
Mediator = mediator;
|
||||
@@ -139,6 +99,7 @@ public partial class ObservableCollection<TItem> :
|
||||
public event NotifyCollectionChangedEventHandler? CollectionChanged;
|
||||
|
||||
public event EventHandler? DeactivateHandler;
|
||||
|
||||
public IDisposer Disposer { get; private set; }
|
||||
|
||||
public IServiceFactory Factory { get; private set; }
|
||||
@@ -240,11 +201,11 @@ public partial class ObservableCollection<TItem> :
|
||||
Clear();
|
||||
}
|
||||
|
||||
AggregateExpression expression = BuildAggregateExpression();
|
||||
SynchronizeExpression expression = BuildAggregateExpression();
|
||||
Publisher.PublishUI(expression.Value, expression.Key);
|
||||
}
|
||||
|
||||
public void Fetch(Func<AggregateExpression> aggregateDelegate,
|
||||
public void Fetch(Func<SynchronizeExpression> aggregateDelegate,
|
||||
bool reset = false)
|
||||
{
|
||||
if (reset)
|
||||
@@ -252,7 +213,7 @@ public partial class ObservableCollection<TItem> :
|
||||
Clear();
|
||||
}
|
||||
|
||||
AggregateExpression expression = aggregateDelegate.Invoke();
|
||||
SynchronizeExpression expression = aggregateDelegate.Invoke();
|
||||
Publisher.PublishUI(expression.Value, expression.Key);
|
||||
}
|
||||
|
||||
@@ -616,8 +577,8 @@ public partial class ObservableCollection<TItem> :
|
||||
collection.Insert(index > Count ? Count : index, item);
|
||||
}
|
||||
|
||||
protected virtual AggregateExpression BuildAggregateExpression() =>
|
||||
new(new AggerateEventArgs<TItem>());
|
||||
protected virtual SynchronizeExpression BuildAggregateExpression() =>
|
||||
new(new SynchronizeEventArgs<TItem>());
|
||||
|
||||
protected virtual void RemoveItem(int index) =>
|
||||
collection.RemoveAt(index);
|
||||
@@ -664,12 +625,11 @@ public partial class ObservableCollection<TItem> :
|
||||
}
|
||||
}
|
||||
|
||||
public partial class ObservableCollection<TValue, TViewModel>(ICollectionSynchronizer synchronizer,
|
||||
IServiceProvider provider,
|
||||
public partial class ObservableCollection<TValue, TViewModel>(IServiceProvider provider,
|
||||
IServiceFactory factory,
|
||||
IMediator mediator,
|
||||
IPublisher publisher,
|
||||
ISubscription subscriber, IDisposer disposer) : ObservableCollection<TViewModel>(synchronizer, provider, factory, mediator, publisher, subscriber, disposer)
|
||||
ISubscription subscriber, IDisposer disposer) : ObservableCollection<TViewModel>(provider, factory, mediator, publisher, subscriber, disposer)
|
||||
where TViewModel : notnull,
|
||||
IDisposable
|
||||
{
|
||||
@@ -677,11 +637,10 @@ public partial class ObservableCollection<TValue, TViewModel>(ICollectionSynchro
|
||||
private TValue? value;
|
||||
}
|
||||
|
||||
public class ObservableCollection(ICollectionSynchronizer synchronizer,
|
||||
IServiceProvider provider,
|
||||
public class ObservableCollection(IServiceProvider provider,
|
||||
IServiceFactory factory,
|
||||
IMediator mediator,
|
||||
IPublisher publisher,
|
||||
ISubscription subscriber,
|
||||
IDisposer disposer) :
|
||||
ObservableCollection<IDisposable>(synchronizer, provider, factory, mediator, publisher, subscriber, disposer);
|
||||
ObservableCollection<IDisposable>(provider, factory, mediator, publisher, subscriber, disposer);
|
||||
Reference in New Issue
Block a user