wip
This commit is contained in:
@@ -3,7 +3,8 @@ using System.Diagnostics.CodeAnalysis;
|
||||
|
||||
namespace Toolkit.WinUI;
|
||||
|
||||
public interface IWindowRegistry
|
||||
public interface IWindowRegistry :
|
||||
IDisposable
|
||||
{
|
||||
void Add(Window window);
|
||||
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
using Microsoft.UI.Xaml;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Reactive.Disposables;
|
||||
using Toolkit.Foundation;
|
||||
|
||||
namespace Toolkit.WinUI;
|
||||
|
||||
public class WindowRegistry :
|
||||
public class WindowRegistry(IDisposer disposer) :
|
||||
IWindowRegistry
|
||||
{
|
||||
private readonly List<Window> windows = [];
|
||||
@@ -19,13 +21,27 @@ public class WindowRegistry :
|
||||
}
|
||||
|
||||
windows.Add(window);
|
||||
|
||||
disposer.Add(this, Disposable.Create(() =>
|
||||
{
|
||||
windows.Remove(window);
|
||||
window.Close();
|
||||
}));
|
||||
|
||||
window.Closed += OnWindowClosed;
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
disposer.Dispose(this);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
public bool TryGet<TWindow>([DisallowNull] out TWindow? window)
|
||||
where TWindow : Window
|
||||
{
|
||||
|
||||
window = windows.OfType<TWindow>().FirstOrDefault() ?? null;
|
||||
return window is not null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user