那么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消息框时为我的服务添加新方法(虽然我自己有这些方法作为方法,以方便使用).
所以这是一个坚实的方法,在这一点上,我认为你不会发现更好的东西,只有你可能更喜欢的东西.
总结以上是内存溢出为你收集整理的c# – 在ViewModel中处理对话框的最佳方法是什么?全部内容,希望文章能够帮你解决c# – 在ViewModel中处理对话框的最佳方法是什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)