This commit is contained in:
TheXamlGuy
2024-06-15 11:09:15 +01:00
parent b155f5c6e2
commit 370e6bf96b
9 changed files with 22 additions and 96 deletions
-5
View File
@@ -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();
-6
View File
@@ -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();
-5
View File
@@ -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();
+6 -20
View File
@@ -17,29 +17,15 @@ public class ContentFactory(IMediator mediator,
content = await mediator.Handle(descriptor.ContentType, createEvent, descriptor.Key);
}
if (content is null)
content ??= parameters is { Length: > 0 }
? factory.Create(descriptor.ContentType, args =>
{
if (parameters is { Length: > 0 })
if (args is IInitialization initialization)
{
content = factory.Create(descriptor.ContentType, args =>
{
if (args is IPostInitialization initialization)
{
initialization.PostInitialize();
}
}, parameters);
}
else
{
content = provider.GetRequiredKeyedService(descriptor.ContentType, args =>
{
if (args is IPostInitialization initialization)
{
initialization.PostInitialize();
}
}, descriptor.Key);
}
initialization.Initialize();
}
}, 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;
}
}
+4 -16
View File
@@ -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 -18
View File
@@ -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);