【发布时间】:2018-09-19 23:44:33
【问题描述】:
我正在尝试通过 DialogService 实现在应用程序中处理多个视图/窗口的“MVVM 推荐”方式。但是,在显示子视图后,我在实现关闭父视图时遇到了困难。到目前为止,这是我的实现。 WPF MVVM 处理这种情况的最佳策略是什么?
DialogService.cs(我尝试使其通用,以便它可以显示和关闭任何窗口)
public class DialogService : IDialogService
{
/// <summary>
/// Closes the specified window screen
/// </summary>
/// <param name="dialogWindow"></param>
public void CloseDialog(Window dialogWindow)
{
if ( dialogWindow != null )
dialogWindow.Close ( );
}
/// <summary>
/// Shows the specified window screen
/// </summary>
/// <param name="dialogWindow"></param>
public void ShowDialog(Window dialogWindow)
{
if ( dialogWindow != null )
dialogWindow.ShowDialog ( );
}
}
显示子视图的视图模型是 SelectPackageViewModel.cs
public SelectPackageViewModel(IPackageDataService packageDataService, IDialogService dialogService)
{
this.packageDataService = packageDataService;
this.dialogService = dialogService;
LoadPackages();
LoadCommands();
}
private void LoadCommands()
{
CreateNewCommand = new CustomCommand(CreateNewPackage);
}
private void CreateNewPackage(object obj)
{
dialogService.ShowDialog(new CreatePackage());
}
父视图 SelectPackage.cs。子视图是 CreatePackage.cs
<Button Name="btnNewPackage"
Content="New..."
HorizontalAlignment="Center"
Width="120"
Height="30"
FontSize="15" FontWeight="Bold"
Margin="10"
Command="{Binding CreateNewCommand}"/>
【问题讨论】:
-
MVVM 的“推荐”方式是 ViewModel 对 UI 一无所知。这包括通过偷偷摸摸的对话服务间接进行
-
研究中介模式以及如何将其应用于 WPF 和 MVVM
-
在视图模型中创建一个窗口会破坏 MVVM 模式并破坏使用对话服务的全部目的。