我正在尝试为MVVM设计模式实现IView,它允许ViewModel使用IView实现的类与用户交互。 IView界面具有提示,警报和功能等功能。确认。我有三个IView接口的实现:CommandLineInteraction,WPFInteraction& TelerikInteraction。前两个行为相似(即,它们是同步的)。第三个是异步工作。
我希望TelerikInteraction同步工作。这意味着,调用RadWindow.Confirm()或RadWindow.Prompt()之后的代码应该等到用户进行交互。
以下是所有三种实现的代码片段:
//CommandLine Implementation
public CustomConfirmResult Confirm(string message) {
Console.WriteLine(message);
Console.WriteLine("[Y]es [N]o");
string s = Console.ReadLine();
if(s == y || s == Y)
return CustomConfirmResult.Yes;
else
return CustomConfirmResult.No;
}
//Windows Implementation
public CustomConfirmResult Confirm(string message) {
MessageBoxResult mbr = MessageBox.Show(message, "", MessageBoxButton.OKCancel);
if(mbr == MessageBoxResult.OK)
return CustomConfirmResult.Yes;
else
return CustomConfirmResult.No;
}
//Telerik Implementation
public CustomConfirmResult Confirm(string message) {
CustomConfirmResult result;
RadWindow.Confirm(new DialogParameters{
Content=message,
Closed = (o1, e1) =>{
if(e1.DialogResult == true)
result = CustomConfirmResult.Yes;
else
result = CustomConfirmResult.No;
}
});
return result; //Executed before user interacts with the confirm dialog
}
如何使这些实现在行为上相似?
谢谢,
Sunil Kumar
答案 0 :(得分:1)
Silverlight旨在异步工作。尝试使其同步工作将限制产品的响应能力。
您应该停止使用MessageBox并转而使用完全异步编码模型。
拥有onCancel和onConfirm委托或动作的辅助方法(或onYes,onNo或任何你喜欢的方法)是编写问题&的最简单方法。回答你所追求的情况。