私はほぼ1年間、UnityとMVVMパターンを使用してWPF/Prismでほぼ独占的に作業してきました。私はシェル、いくつかのモジュール、スコープリージョンマネージャとシェルホスト共通ポップアップのようなクールなものをたくさん確立するのにかなり成功しました。WPF MVVM/Prism(6.2)/ Unity - PopupWindowActionスレッド間でオーナーを失う
私は今日私の頭を掻き分けています。Cannot set Owner property to a Window that has been closed.
定期的にアセンブリの更新を確認し、アプリケーションを再起動してシェルのViewModelで処理するように要求します。私はbootstrapper.Run()
でそれをやっていて、bootstrapper
はすべてのウィンドウを殺す方法です。ブーム、window that has been closed.
エラーは意味がありますが、私は問題を解決できないようです。 Prism 6.2
では、これは(そしておそらくより/以下)を導入した:
if (AssociatedObject != null)
wrapperWindow.Owner = Window.GetWindow(AssociatedObject);
は、スタックトレースによると、これはPopupWindowAction
が、それはOwner
だと思っているためしかし、今クローズWindow
(、それが失敗している原因となっているものですこれは新しい機能であり、テストされていないことに気付く価値がある< 6.2)。私はそれを再インスタンス化する方法を見つけることができないか、 Owner
(またはそれらの行に沿った何か) - さらにははになるはずです。
私はこのPopupWindowAction
をInteractionRequestTrigger
で発射しており、そのすべてがカスタムUserControl
を開くだけです。また、このすべては、別のスレッドで起こるので、私は(基本的にINotification
を発射する)私のスコープInteractionService
を見つけるために戻って、主Dispatcher
に行かなければならない:
Application.Current.Dispatcher.Invoke(() =>
{
var dialogResponse = InteractionService.ShowDialog(...
//...
私の質問はです:ポップアップができませんそれが閉じられているか、別のスレッドになっているので、親だと分かりますか?それを超えて、これは合理的な話ですか、それとも私のユーザーの要求に対してより良い解決策ですか?