跟进 IDialogService 方法:
System.Windows.MessageBoxResult
枚举呢?将其排除在接口之外并仅将其包含在实现中的更好方法是什么?
我为System.Windows.MessageBoxResult
枚举选择的方法:
我在 IDialogInterface 旁边添加了一个枚举,包括 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, string caption, 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 中引入必要的类型来直接启动我的对话框。我很确定这不是最好或最干净的方法。
我发现这篇文章采用了一种有趣且更简洁的方法。它使用 IDialogService 接口:
public interface IDialogService
{
int Width { get; set; }
int Height { get; set; }
void Show(string title, string message, Action<DialogResult> onClosedCallback);
}
我还发现这篇文章似乎更好,因为它在尝试使用之前检查 IDialogInterface 是否为空:
private void PerformAddNewCustomer()
{
CustomerList.Add(new Customer { Name = "Name" + i });
i++;
if (dialogService != null)
{
dialogService.Show("Customed added");
}
}
这是将对话框与 ViewModel 分开的最佳方法,还是有更好的方法?