From 25ce5d78baaa554c5f5fde35a85311e48bb3fb06 Mon Sep 17 00:00:00 2001 From: Sakura Date: Wed, 22 Nov 2023 21:28:58 +0800 Subject: [PATCH] ViewManager --- CPF.Toolkit/ViewManager.cs | 45 ++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/CPF.Toolkit/ViewManager.cs b/CPF.Toolkit/ViewManager.cs index 78e6c82..3ff3f97 100644 --- a/CPF.Toolkit/ViewManager.cs +++ b/CPF.Toolkit/ViewManager.cs @@ -11,11 +11,34 @@ namespace CPF.Toolkit public static T View(params object[] arges) where T : Window { var view = Activator.CreateInstance(typeof(T), arges) as T; - view.Initialized += View_Initialized; view.Closing += View_Closing; + view.PropertyChanged += View_PropertyChanged; return view; } + private static void View_PropertyChanged(object sender, CPFPropertyChangedEventArgs e) + { + var view = sender as Window; + if (e.PropertyName == nameof(Window.DataContext)) + { + if (view.DataContext is IClosable closable) + { + closable.Closable += (ss, dialogResult) => + { + if (view.IsDialogMode == true) + { + view.DialogResult = dialogResult; + } + view.Close(); + }; + } + if (view.DataContext is IDialog dialog) + { + dialog.Dialog = new DialogService(view); + } + } + } + private static void View_Closing(object sender, ClosingEventArgs e) { var view = sender as Window; @@ -24,25 +47,5 @@ namespace CPF.Toolkit closable.OnClosable(sender, e); } } - - private static void View_Initialized(object sender, EventArgs e) - { - var view = sender as Window; - if (view.DataContext is IClosable closable) - { - closable.Closable += (ss, dialogResult) => - { - if (view.IsDialogMode == true) - { - view.DialogResult = dialogResult; - } - view.Close(); - }; - } - if (view.DataContext is IDialog dialog) - { - dialog.Dialog = new DialogService(view); - } - } } }