加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在ViewModel中处理对话框的最佳方法是什么?

发布时间:2020-12-15 21:32:49 所属栏目:百科 来源:网络整理
导读:跟进IDialogService方法: 那么System.Windows.MessageBoxResult枚举呢?更好的方法是将其保留在接口之外并仅将其纳入实现中吗? 我为System.Windows.MessageBoxResult枚举选择的方法: 我在IDialogInterface旁边添加了一个enum,它包含Yes,NO,Ok,Cancel: na
跟进IDialogService方法:

那么System.Windows.MessageBoxResult枚举呢?更好的方法是将其保留在接口之外并仅将其纳入实现中吗?

我为System.Windows.MessageBoxResult枚举选择的方法:

我在IDialogInterface旁边添加了一个enum,它包含Yes,NO,Ok,Cancel:

namespace Foo.Bar.Dialogs
{
    public enum DialogResult { Ok,Yes,No,Cancel }

    public interface IDialogService
    {
        void ShowErrorBox(string error_message);

        DialogResult ShowQuestionBox(string question_message);

        DialogResult ShowQuestionBox(string question_message,string caption);

        DialogResult ShowQuestionBox(string question_message,string caption,bool allow_cancel);

        DialogResult ShowQuestionBox(string question_message,bool allow_cancel,bool show_as_error);

        void ShowWarningBox(string message,string caption = "");

        void ShowInformationBox(string message);

        void ShowInformationBox(string message,string caption);
    }
}

初步问题:

我正在努力将所有命令从我的.asmx.cs文件移动到某个应用程序主窗口的ViewModel.

现在我必须弄清楚如何处理要求用户确认的命令.

现在我只是在我的ViewModel中填入必要的类型来直接启动我的对话框.我很确定这不是最好或最干净的方法.

我发现这个article有一个有趣和清洁的方法.它使用IDialogService接口:

public interface IDialogService
{
    int Width { get; set; }
    int Height { get; set; }
    void Show(string title,string message,Action<DialogResult> onClosedCallback);
}

我还发现这个article似乎更好,因为它在尝试使用之前检查IDialogInterface是否为null:

private void PerformAddNewCustomer() 
{ 
    CustomerList.Add(new Customer { Name = "Name" + i }); 
    i++; 

    if (dialogService != null) 
    { 
        dialogService.Show("Customed added"); 
    } 
}

这是将对话框与ViewModel分开的最佳方法,还是有更好的方法?

解决方法

我会说你发布的链接中的方法是一个很好的,也非常普遍(来源:我在网上查看代码;)).它使用起来相当简单,它通过在单元测试中使用虚拟服务使对话框可测试,并简化了重构对话框的过程.

就个人而言,我的DialogService方法签名采用了Tuple< string,Action>的列表.然后我根据它创建对话窗口的按钮.它允许ViewModel从对话框窗口请求一些特殊功能,而不必每次我的需要超过Ok或YesNo消息框时为我的服务添加新方法(虽然我自己有这些方法作为方法,以方便使用).

所以这是一个坚实的方法,在这一点上,我认为你不会发现更好的东西,只有你可能更喜欢的东西.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读