WIP
This commit is contained in:
@@ -129,11 +129,6 @@ public class ContentDialogHandler(IDispatcher dispatcher) :
|
||||
|
||||
// A hack to wait for the dialog to finish loading up to make it appear more responsive
|
||||
await Task.Delay(250);
|
||||
if (content is IInitialization initializer)
|
||||
{
|
||||
await initializer.Initialize();
|
||||
}
|
||||
|
||||
if (content is IActivated activated)
|
||||
{
|
||||
await activated.OnActivated();
|
||||
|
||||
@@ -17,7 +17,6 @@ public class ContentTemplate :
|
||||
if (observableViewModel.Provider is IServiceProvider provider)
|
||||
{
|
||||
Type itemType = item.GetType();
|
||||
|
||||
if (provider.GetRequiredKeyedService<IContentTemplateDescriptor>(itemType.Name.Replace("ViewModel", ""))
|
||||
is IContentTemplateDescriptor descriptor)
|
||||
{
|
||||
@@ -28,11 +27,6 @@ public class ContentTemplate :
|
||||
control.Loaded -= HandleLoaded;
|
||||
if (control.DataContext is object content)
|
||||
{
|
||||
if (content is IInitialization initializer)
|
||||
{
|
||||
await initializer.Initialize();
|
||||
}
|
||||
|
||||
if (content is IActivated activated)
|
||||
{
|
||||
await activated.OnActivated();
|
||||
|
||||
@@ -72,11 +72,6 @@ public class FrameHandler :
|
||||
sender.AddHandler(Frame.NavigatingFromEvent, HandleNavigatingFrom);
|
||||
if (sender.DataContext is object content)
|
||||
{
|
||||
if (content is IInitialization initializer)
|
||||
{
|
||||
await initializer.Initialize();
|
||||
}
|
||||
|
||||
if (content is IActivated activated)
|
||||
{
|
||||
await activated.OnActivated();
|
||||
|
||||
@@ -17,29 +17,15 @@ public class ContentFactory(IMediator mediator,
|
||||
content = await mediator.Handle(descriptor.ContentType, createEvent, descriptor.Key);
|
||||
}
|
||||
|
||||
if (content is null)
|
||||
{
|
||||
if (parameters is { Length: > 0 })
|
||||
{
|
||||
content = factory.Create(descriptor.ContentType, args =>
|
||||
content ??= parameters is { Length: > 0 }
|
||||
? factory.Create(descriptor.ContentType, args =>
|
||||
{
|
||||
if (args is IPostInitialization initialization)
|
||||
if (args is IInitialization initialization)
|
||||
{
|
||||
initialization.PostInitialize();
|
||||
initialization.Initialize();
|
||||
}
|
||||
}, parameters);
|
||||
}
|
||||
else
|
||||
{
|
||||
content = provider.GetRequiredKeyedService(descriptor.ContentType, args =>
|
||||
{
|
||||
if (args is IPostInitialization initialization)
|
||||
{
|
||||
initialization.PostInitialize();
|
||||
}
|
||||
}, descriptor.Key);
|
||||
}
|
||||
}
|
||||
}, parameters)
|
||||
: provider.GetRequiredKeyedService(descriptor.ContentType, descriptor.Key);
|
||||
|
||||
return content;
|
||||
}
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
namespace Toolkit.Foundation;
|
||||
|
||||
public interface IPostInitialization
|
||||
{
|
||||
void PostInitialize();
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace Toolkit.Foundation;
|
||||
|
||||
public static class IServiceProviderExtensions
|
||||
{
|
||||
public static object GetRequiredKeyedService(this IServiceProvider provider,
|
||||
Type serviceType,
|
||||
Action<object> serviceDelegate,
|
||||
object? serviceKey)
|
||||
{
|
||||
object service = provider.GetRequiredKeyedService(serviceType, serviceKey);
|
||||
serviceDelegate.Invoke(service);
|
||||
|
||||
return service;
|
||||
}
|
||||
}
|
||||
@@ -2,8 +2,7 @@
|
||||
|
||||
namespace Toolkit.Foundation;
|
||||
|
||||
public partial class Observable(IServiceProvider
|
||||
provider,
|
||||
public partial class Observable(IServiceProvider provider,
|
||||
IServiceFactory factory,
|
||||
IMediator mediator,
|
||||
IPublisher publisher,
|
||||
@@ -12,7 +11,6 @@ public partial class Observable(IServiceProvider
|
||||
ObservableObject,
|
||||
IObservableViewModel,
|
||||
IActivityIndicator,
|
||||
IPostInitialization,
|
||||
IInitialization,
|
||||
IActivated,
|
||||
IDeactivating,
|
||||
@@ -32,7 +30,6 @@ public partial class Observable(IServiceProvider
|
||||
|
||||
[ObservableProperty]
|
||||
private bool initialized;
|
||||
private bool postInitialized;
|
||||
|
||||
public event EventHandler? DeactivateHandler;
|
||||
|
||||
@@ -67,7 +64,7 @@ public partial class Observable(IServiceProvider
|
||||
Disposer.Dispose(this);
|
||||
}
|
||||
|
||||
public Task Initialize()
|
||||
public virtual Task Initialize()
|
||||
{
|
||||
if (Initialized)
|
||||
{
|
||||
@@ -75,6 +72,8 @@ public partial class Observable(IServiceProvider
|
||||
}
|
||||
|
||||
Initialized = true;
|
||||
|
||||
Subscriber.Subscribe(this);
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
@@ -87,17 +86,6 @@ public partial class Observable(IServiceProvider
|
||||
public virtual Task OnDeactivating() =>
|
||||
Task.CompletedTask;
|
||||
|
||||
public virtual void PostInitialize()
|
||||
{
|
||||
if (postInitialized)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
postInitialized = true;
|
||||
Subscriber.Subscribe(this);
|
||||
}
|
||||
|
||||
public void Revert()
|
||||
{
|
||||
foreach (object trackedProperty in trackedProperties.Values)
|
||||
|
||||
@@ -9,7 +9,6 @@ namespace Toolkit.Foundation;
|
||||
public partial class ObservableCollection<TItem> :
|
||||
ObservableObject,
|
||||
IObservableCollectionViewModel<TItem>,
|
||||
IPostInitialization,
|
||||
IInitialization,
|
||||
IActivated,
|
||||
IDeactivating,
|
||||
@@ -50,11 +49,10 @@ public partial class ObservableCollection<TItem> :
|
||||
|
||||
[ObservableProperty]
|
||||
private int count;
|
||||
|
||||
[ObservableProperty]
|
||||
private bool initialized;
|
||||
|
||||
private bool postInitialized;
|
||||
|
||||
[ObservableProperty]
|
||||
private TItem? selectedItem;
|
||||
|
||||
@@ -118,6 +116,7 @@ public partial class ObservableCollection<TItem> :
|
||||
public IServiceProvider Provider { get; private set; }
|
||||
|
||||
public IPublisher Publisher { get; private set; }
|
||||
|
||||
public ISubscriber Subscriber { get; }
|
||||
|
||||
object ICollection.SyncRoot => this;
|
||||
@@ -153,9 +152,9 @@ public partial class ObservableCollection<TItem> :
|
||||
{
|
||||
T? item = Factory.Create<T>(args =>
|
||||
{
|
||||
if (args is IPostInitialization initialization)
|
||||
if (args is IInitialization initialization)
|
||||
{
|
||||
initialization.PostInitialize();
|
||||
initialization.Initialize();
|
||||
}
|
||||
}, parameters);
|
||||
|
||||
@@ -208,6 +207,7 @@ public partial class ObservableCollection<TItem> :
|
||||
Clear();
|
||||
factory.Invoke(this);
|
||||
}
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
clearing = true;
|
||||
@@ -411,6 +411,8 @@ public partial class ObservableCollection<TItem> :
|
||||
}
|
||||
|
||||
Initialized = true;
|
||||
|
||||
Subscriber.Subscribe(this);
|
||||
Synchronize();
|
||||
|
||||
return Task.CompletedTask;
|
||||
@@ -423,9 +425,9 @@ public partial class ObservableCollection<TItem> :
|
||||
{
|
||||
T? item = Factory.Create<T>(args =>
|
||||
{
|
||||
if (args is IPostInitialization initialization)
|
||||
if (args is IInitialization initialization)
|
||||
{
|
||||
initialization.PostInitialize();
|
||||
initialization.Initialize();
|
||||
}
|
||||
}, parameters);
|
||||
|
||||
@@ -521,17 +523,6 @@ public partial class ObservableCollection<TItem> :
|
||||
public virtual Task OnDeactivating() =>
|
||||
Task.CompletedTask;
|
||||
|
||||
public virtual void PostInitialize()
|
||||
{
|
||||
if (postInitialized)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
postInitialized = true;
|
||||
Subscriber.Subscribe(this);
|
||||
}
|
||||
|
||||
public bool Remove(TItem item)
|
||||
{
|
||||
int index = collection.IndexOf(item);
|
||||
|
||||
Reference in New Issue
Block a user