using Microsoft.UI.Xaml; using System.Reflection; namespace Hyperbar.UI.Windows; public class ViewModelContentBinder(NavigationTargetCollection contents) : IViewModelContentBinder { public void Bind(FrameworkElement view, object context) { if (context.GetType().GetCustomAttributes() is IEnumerable attributes) { foreach (NavigationTargetAttribute attribute in attributes) { if (!contents.ContainsKey(attribute.Name)) { if (view.FindName(attribute.Name) is FrameworkElement content) { contents.Add(attribute.Name, content); void HandleUnloaded(object sender, RoutedEventArgs args) { view.Unloaded -= HandleUnloaded; contents.Remove(attribute.Name); } view.Unloaded += HandleUnloaded; } } } } } }