Внедрение WPF MVVM Dialog Service - PullRequest
       0

Внедрение WPF MVVM Dialog Service

0 голосов
/ 20 сентября 2018

Я пытаюсь реализовать рекомендованный MVVM способ обработки нескольких представлений / окон в приложении через DialogService.Однако я столкнулся с трудностью реализации закрытия родительского представления после отображения дочернего представления.Вот моя реализация до сих пор.Какова лучшая стратегия для 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}"/>

1 Ответ

0 голосов
/ 20 сентября 2018

Вы всегда можете использовать пакет NuGet с именем MvvmDialogs или посмотреть на его реализацию.В конце концов, это открытый исходный код на GitHub.

Дружеский совет, будьте в курсе ответов относительно MVVM, которые являются абсолютными.Эти ответы часто приходят от разработчиков на этапе обучения, где правила и руководящие принципы выполняются без понимания их выгоды.По мере вашего продвижения вы начинаете задавать вопросы «почему» и становитесь более прагматичными.Идея, что модель представления не должна знать о сервисе представления, просто глупа.Это модель вида, вид в названии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...