在MVVM
应用程序中,我有一个长时间运行的计算
在遗留代码中。
遗留代码显示MessageBox
询问用户是否继续。
现在我希望这段代码尽可能简单地坚持MVVM
关于递交回调以显示MessageBox
并评估
结果在里面。
如何最简单地完成这项工作?
经常看到Action回调,但我不知道怎么回事 在遗留代码中使用bool。
我想传递字符串以在遗留代码的MessageBox
中显示
并将决定(bool)返回给遗留代码。
请注意:我现在不需要做更大的重构,但是想要
现在摆脱遗留代码中的MessageBox
。
也许我可以使用像
这样的功能 private bool ShowMessageBox(string text)
{
var result = MessageBox.Show(text, "", MessageBoxButton.YesNo);
if (result.Equals(MessageBoxResult.Yes))
{
return true;
}
return false;
}
-edit -
我应该使用一些
Action<string, Action<bool>>
方法签名? 如何在遗留代码中访问bool?
答案 0 :(得分:1)
也许你可以使用delegate
?
对于您展示的方法,您可以像这样创建delegate
:
public delegate bool ShowMessageBoxDelegate(string text);
然后让我们说你有一个使用delegate
作为类型的属性:
public ShowMessageBoxDelegate ShowMessageBoxDelegateProperty { get; set; }
现在,如果您的ShowMessageBox
方法符合此delegate
的签名...
public bool ShowMessageBox(string text)
{
var result = MessageBox.Show(text, "", MessageBoxButton.YesNo);
if (result.Equals(MessageBoxResult.Yes))
{
return true;
}
return false;
}
...然后您可以将其设置为ShowMessageBoxDelegateProperty
属性的值:
ShowMessageBoxDelegateProperty = ShowMessageBox;
请注意缺少的括号。 delegate
也可以是多播,这意味着它们可以附加多个方法:
ShowMessageBoxDelegateProperty += ShowMessageBox;
您也可以将它们用作方法中的参数:
public void ProxyShowMessageBox(ShowMessageBoxDelegate showMessageBoxDelegate)
{
if (showMessageBoxDelegate != null)
{
bool result = showMessageBoxDelegate("MessageBox message");
}
}
然后你会这样称呼它:
ProxyShowMessageBox(ShowMessageBox);
您可以在MSDN的Delegates Tutorial页面上找到更多信息。