MVVM Toolkit - 如果WCF服务失败,如何让MessageBox显示回调中的错误

时间:2010-12-09 23:02:58

标签: wpf silverlight mvvm mvvm-light mvvm-toolkit

我正在使用MVVM Toolkit来构建我的WP7应用程序,并且我试图让一个MessageBox在WCF服务失败时显示错误。

以下是我在ServiceHelper层中的代码:

        public void GetRandomBibleVerseById(Action<Bible, Exception> callback)
    {
        var client = new StoneFalconClient();

        client.GetRandomBibleVerseByIdCompleted += (s, e) =>
            {
                var userCallback = e.UserState as Action<Bible, Exception>;

                if (userCallback == null)
                {
                    return;
                }

                if (e.Error != null)
                {
                    userCallback(null, e.Error);
                    return;
                }

                userCallback(e.Result, null);
            };

        client.GetRandomBibleVerseByIdAsync(callback);
    }

我尝试通过执行类似的操作在服务调用周围放置一个try / catch但是我没有得到任何消息框以显示错误。这是我的MainViewModel:

        public MainViewModel()
    {
        if (IsInDesignMode)
        {
            BibleVerse = LoadDebugVerse();
        }
        else
        {
            try
            {
                ServiceHelper helper = new ServiceHelper();

                helper.GetRandomBibleVerseById((bibleVerse, error) =>
                {
                    Bible displayVerse = LoadDisplayVerse(bibleVerse);
                    BibleVerse = displayVerse;

                    TestamentBookChapterVerse = displayVerse.Testament + ": " + displayVerse.Book + " " + displayVerse.Chapter + ":" + displayVerse.Verse; ;
                });
            }
            catch (Exception ex)
            {
                ErrorMessage = new RelayCommand<String>(m => MessageBox.Show("Error: Click refresh to try again"));
            }
        }
    }

我将xaml页面中的xaml绑定到viewModel。我怀疑我不应该使用try / caatch而是检查e.Error但我不知道该怎么做。

任何帮助都会受到赞赏,我一直在寻找一个没有运气的答案。

1 个答案:

答案 0 :(得分:0)

RJ,

您的客户端对象(StoneFalconClient类型)应该有一个 AsyncCompleted 事件,您可以为其注册处理程序。在 OnAsyncCompleted 处理程序中,EventArgs参数中应该有一个错误字段。

祝你好运 吉姆麦克库迪