0

在一个MVVM应用程序中,我有一个在遗留代码中运行的长时间运行的计算。

该遗留代码显示MessageBox询问用户是否应继续。

现在我希望这段代码MVVM尽可能简单,并考虑提交一个回调来显示MessageBox和评估里面的结果。

这怎么做最容易?

经常看到回调的 Action,但我不知道如何在遗留代码中使用 bool。

我想传递字符串以显示在MessageBox遗留代码中,并将决定(一个布尔值)返回给遗留代码。

请注意:我现在不必进行更大的重构,但现在想摆脱MessageBox遗留代码的内部。

也许我可以使用类似的功能

    private bool ShowMessageBox(string text)
    {
        var result = MessageBox.Show(text, "", MessageBoxButton.YesNo);

        if (result.Equals(MessageBoxResult.Yes))
        {
            return true;
        }

        return false;
    }

-编辑-

我应该使用一些

Action<string, Action<bool>> 

对于方法签名?如何访问旧代码中的布尔值?

4

1 回答 1

1

也许你可以使用delegate?

对于您展示的方法,您可以创建一个delegate这样的:

public delegate bool ShowMessageBoxDelegate(string text);

然后假设您有一个使用 thedelegate作为类型的属性:

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;

注意缺少的括号。Adelegate也可以是多播的,这仅仅意味着它们可以附加多个方法:

ShowMessageBoxDelegateProperty += ShowMessageBox;

您还可以将它们用作方法中的参数:

public void ProxyShowMessageBox(ShowMessageBoxDelegate showMessageBoxDelegate)
{
    if (showMessageBoxDelegate != null)
    {
        bool result = showMessageBoxDelegate("MessageBox message");
    }
}

然后你会这样称呼它:

ProxyShowMessageBox(ShowMessageBox);

您可以从MSDN 上的代表教程页面了解更多信息。

于 2013-08-22T22:17:24.347 回答