MVVMパターンに従うWPFアプリケーションを開発しています。モーダルダイアログを表示するために、私は次の記事の示唆に従っています。 http://www.codeproject.com/Articles/36745/Showing-Dialogs-When-Using-the-MVVM-Pattern?fid=1541292&fr=26#xx0xxサービスロケータを使用したMVVMモーダルダイアログ
しかし、DialogServiceインターフェイスのShowDialogメソッドがMainWindowViewModelから呼び出されていることがわかりました。
私のアプリケーションの状況は少し異なります。 MainWindow.xamlには、ボタンが含まれているChildViewというユーザーコントロールが含まれています。 MainWindowViewModelには、ChildViewとバインドされているChildVMとは別のViewModelが含まれています。 ChildVMにはAddCommandが含まれており、AddCommandに対応するAddExecuteメソッド が呼び出されると、モーダルダイアログを表示する必要があります。 これをどのように達成できますか?
編集コード
private Window FindOwnerWindow(object viewModel)
{
FrameworkElement view = null;
// Windows and UserControls are registered as view.
// So all the active windows and userControls are contained in views
foreach (FrameworkElement viewIterator in views)
{
// Check whether the view is an Window
// If the view is an window and dataContext of the window, matches
// with the viewModel, then set view = viewIterator
Window viewWindow = viewIterator as Window;
if (null != viewWindow)
{
if (true == ReferenceEquals(viewWindow.DataContext, viewModel))
{
view = viewWindow;
break;
}
}
else
{
// Check whether the view is an UserControl
// If the view is an UserControl and Content of the userControl, matches
// with the viewModel, then set view = userControl
// In case the view is an user control, then find the Window that contains the
// user control and set it as owner
System.Windows.Controls.UserControl userControl = viewIterator as System.Windows.Controls.UserControl;
if (null != userControl)
{
if (true == ReferenceEquals(userControl.Content, viewModel))
{
view = userControl;
break;
}
}
}
}
if (view == null)
{
throw new ArgumentException("Viewmodel is not referenced by any registered View.");
}
// Get owner window
Window owner = view as Window;
if (owner == null)
{
owner = Window.GetWindow(view);
}
// Make sure owner window was found
if (owner == null)
{
throw new InvalidOperationException("View is not contained within a Window.");
}
return owner;
}
こんにちは@Anirban、http://www.codeproject.com/Articles/332615/WPF-Master-Details-MVVM-Applicationからこの記事を追跡し、どのようにモーダルダイアログ作品に見えます。私はこの記事を使って自分のアプリケーションを作成しました。お役に立てれば! –
アプローチは私が提供したリンクと同じです。 –
解決方法はありますか? – Marc