gpt4 book ai didi

c# - 实现WPF MVVM对话框服务

转载 作者:行者123 更新时间:2023-12-03 10:54:09 25 4
gpt4 key购买 nike

我正在尝试通过DialogService在应用程序中实现“推荐的MVVM”处理多个 View /窗口的方式。但是,在显示 subview 后,在实现关闭父 View 时遇到了困难。到目前为止,这是我的实现。 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 ( );
}
}

显示 subview 的 View 模型是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());
}

父 View SelectPackage.cs。 subview 是CreatePackage.cs
<Button Name="btnNewPackage"
Content="New..."
HorizontalAlignment="Center"
Width="120"
Height="30"
FontSize="15" FontWeight="Bold"
Margin="10"
Command="{Binding CreateNewCommand}"/>

最佳答案

您始终可以使用称为MvvmDialogs的NuGet包,或查看其实现。毕竟,它在GitHub上是开源的。

友善的建议,请注意关于MVVM的绝对答案。这些答案通常来自开发阶段的开发人员,在该阶段遵循规则和准则,却不了解其好处。随着您的进步,您开始质疑“为什么”,并且变得更加务实。 View 模型不应该知道 View 服务的想法是愚蠢的。这是一个 View 模型, View 就是它的名字。

关于c# - 实现WPF MVVM对话框服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52415606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com