Files
Toolkit2/Toolkit.Avalonia/ContentControlHandler.cs
T
2024-11-16 13:52:03 +00:00

58 lines
1.8 KiB
C#

using Avalonia.Controls;
using Avalonia.Interactivity;
using Toolkit.Foundation;
namespace Toolkit.Avalonia;
public class ContentControlHandler :
IHandler<NavigateEventArgs<ContentControl>>
{
public void Handle(NavigateEventArgs<ContentControl> args)
{
if (args.Region is ContentControl contentControl)
{
if (args.Template is Control control)
{
TaskCompletionSource taskCompletionSource = new();
async void HandleLoaded(object? sender, RoutedEventArgs args)
{
control.Loaded -= HandleLoaded;
if (control.DataContext is object content)
{
//if (content is IActivated activated)
//{
// await activated.OnActivated();
//}
}
taskCompletionSource.SetResult();
}
async void HandleUnloaded(object? sender, RoutedEventArgs args)
{
control.Unloaded -= HandleLoaded;
if (control.DataContext is object content)
{
//if (content is IDeactivated deactivated)
//{
// await deactivated.OnDeactivated();
//}
if (content is IDisposable disposable)
{
disposable.Dispose();
}
}
}
control.Loaded += HandleLoaded;
control.Unloaded += HandleUnloaded;
control.DataContext = args.Content;
contentControl.Content = null;
contentControl.Content = control;
}
}
}
}