2010-12-09 28 views
1

J'utilise MVVM Toolkit pour créer mes applications WP7 et j'essaye d'obtenir un MessageBox pour afficher une erreur si le WCF le service échoue.MVVM Toolkit - Comment obtenir un MessageBox pour afficher une erreur du rappel en cas d'échec du service WCF

Voici le code que j'ai dans ma couche 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); 
    } 

J'ai essayé de placer un try/catch autour de l'appel de service en faisant quelque chose comme ça, mais je ne reçois pas de boîte de message à apparaître avec l'erreur. Voici mon 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")); 
      } 
     } 
    } 

Je liant les XAML dans la page XAML au viewmodel. Je suspecte que je ne devrais pas employer le try/caatch mais inspectant plutôt e.Error mais je n'ai aucune idée comment faire cela.

Toute aide serait appréciée, j'ai cherché pour toujours une réponse sans succès.

Répondre

0

RJ,

Votre client objet (de type StoneFalconClient) devrait avoir un AsyncCompleted événement que vous pouvez enregistrer un gestionnaire pour. Dans votre gestionnaire OnAsyncCompleted, il doit y avoir un champ Erreur dans le paramètre EventArgs.

Bonne chance
Jim McCurdy