2010-12-01 6 views
0

J'ai un problème de liaison de données dans un bloc Texte. Ce que je veux faire est que chaque fois qu'il y a une exception qui se produit dans une classe que je veux afficher dans Text Block mais pour une raison quelconque, il ne se disperse pas.Liaison de données dans WPF

Main.xaml

<Window x:Class="TestingWPF.Main" 

     <Window.Resources> 
     <ObjectDataProvider x:Key="showErr" ObjectType="{x:Type local:ErrorLog}"   MethodName="GetError"/> 
      </Window.Resources> 
     <Frame Name="frame1" Width="620"/> 
     <Button Name="button1" Click="button1_Click"> 
     <TextBlock Name="txtBlock6" Text="{Binding Source={StaticResource showErr}}"/> 
    </Window> 

Main.xaml.cs

namespace TestingWPF 
    { 
     public partial class Main : Window 
     { 
      private void button1_Click(object sender, RoutedEventArgs e) 
      { 
      frame1.Source =new Uri("/Page1.xaml", UriKind.Relative);  
      } 
     } 

     public class ErrorLog 
     { 
     private string errorInfo { get; set; } 

     public string GetError(string errorMessage) 
     { 
      return errorInfo =errorMessage; 
     } 
     } 
    } 

Page1.xaml

<Page x:Class="TestingWPF.Page1" 
<Button Name="button1" Click="button1_Click"> 
<Button Name="button2" Click="button2_Click"> 
</Page> 

Page1.xaml.cs

namespace TestingWPF 
{ 
    public partial class Page1 : Page 
    { 
     ErrorLog errorLog = new ErrorLog(); 

     private void button1_Click(object sender, RoutedEventArgs e) 
     { 
      someMethod1(); 
     } 

     private void someMethod1() 
     { 
      try 
      { 
      } 
      catch(Expection e) 
      { 
       errorLog.GetError(e.toString());// This is not dispalying 
      } 
     } 

     private void button2_Click(object sender, RoutedEventArgs e) 
     { 
      someMethod2(); 
     } 

     private void someMethod2() 
     { 
      Class2 class2 = new Class2(); 
      class2.foo(); 
     } 
    } 
} 

Class2.cs

namespace TestingWPF 
{ 
    class Class2 
    { 
     ErrorLog errorLog = new ErrorLog(); 

     public void foo() 
     { 
     try 
     { 
      } 
      catch(Expection e) 
      { 
       errorLog.GetError(e.toString());// This is not dispalying 
      } 

     } 
    } 
} 
+0

Avez-vous regardé les exemples sur le MSDN - [ici] (http://msdn.microsoft.com/en-us/library/system.windows.data.objectdataprovider.aspx) par exemple? – ChrisF

Répondre

0

Où vous définissez en fait l'erreur que je ne vois que la méthode GetError qui ne retourne que le même message que vous passez à elle? Je soit ajouter une parameterless méthode GetError ou se lier à une propriété réelle de l'objet que vous créez, à savoir créer une propriété accessible au public

Error {get;set;} 

dans votre classe ERRORLOG et définir que dans votre méthode SetError, à savoir

public string SetError(string errorMessage) 
{ 
    Error = errorMessage; 
} 
+0

@ Comme j'écris manuellement ici, j'oublie d'ajouter get et set. Je change la classe ErrorLog avec get set. – NETQuestion

+0

Cela ne marchera pas, car il crée plusieurs instances de la classe ErrorLog. Il aurait besoin de s'assurer qu'il met à jour celui auquel il est lié, ce qui n'est pas le cas dans ses exemples –

+0

@Steve Greatrex: Cela ne fonctionne pas avec une instance même. – NETQuestion