2010-07-16 8 views
2

Je cherche à lier une certaine interface utilisateur silverlight à une classe C#. Dans l'exemple de code ci-dessous, il y a deux zones de texte dans la page XAML. Toute modification apportée à une zone de texte est répercutée dans l'autre la minute où elle perd le focus et vice-versa. Tandis que l'exemple que j'ai fonctionne comme je le veux, je n'ai aucune idée de ce qui se passe sous le capot et comment cela fonctionne de cette façon.liaison de l'interface utilisateur Silverlight aux classes .NET fonctionne

Voici le code C#

public class Person : INotifyPropertyChanged 
{ 
    public string FirstName 
    { 
     get 
     {return firstname;} 

     set 
     { firstname = value; 
      FirePropertyChanged("FirstName"); 
     } 

    } 
    private string firstname; 

    void FirePropertyChanged(string property) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(property)); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

Grille dans le MainPage.xaml

<Grid x:Name="MyLayoutRoot" Background="White" ShowGridLines="True"> 
     <TextBox Text="{Binding FirstName, Mode=TwoWay}" Grid.Column="1"></TextBox> 
     <TextBox Text="{Binding FirstName, Mode=TwoWay}" Grid.Column="1" Grid.Row="3"></TextBox> 
</Grid> 

Codebehind pour MainPage.xaml

public partial class MainPage : UserControl 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 
     this.Loaded += new RoutedEventHandler(Page_Loaded); 
    } 

    void Page_Loaded(object sender, RoutedEventArgs e) 
    { 
     Person p = new Person() 
     { 
      FirstName ="Dee" 
     }; 
     MyLayoutRoot.DataContext = p; 
    } 
} 

Ma compréhension à ce jour qui est un peu flou maintenant est-ce:

La zone de texte dans le xaml (mainpage.xaml) sait à quelle propriété se lier en fonction de sa balise "Binding", de la classe (Person) avec laquelle elle a été configurée, dans le fichier xaml codebehind (mainpage.xaml.cs) en utilisant la propriété datacontext là.

INotifyPropertyChanged est une interface de la classe Person qui fournit un hook permettant à l'interface utilisateur de Xaml de savoir quand la propriété FirstName a été modifiée dans l'interface utilisateur. La minute la propriété Prénom est définie, la méthode FirePropertyChanged est appelée qui déclenche cet événement PropertyChangedEventHandler comme cela est mis en œuvre dans cette ligne

PropertyChanged(this, new PropertyChangedEventArgs(property));

Quelqu'un peut-il donner des détails sur ce qui se passe dans les coulisses ici en ce moment , lorsque l'une des zones de texte change et perd son focus; et comment la propriété Binding sur l'interface utilisateur côté client Silverlight, maintenir le contact avec la classe C# qui, corrigez-moi si je me trompe est toujours sur le serveur que l'interface utilisateur Silverlight a été téléchargé à partir de.

Merci pour votre temps.

Répondre

2

Si la classe personne est dans le même projet d'interface utilisateur Silverlight, il est en fait sur le client (pas le serveur). Peut-être que cela le rend plus facile à comprendre?

+0

Il ne doit pas être. Je suis mon exemple. mais dans les scénarios de la vie réelle, je suppose que cette classe est de la couche de données qui n'est pas porté à travers avec l'interface utilisateur Silverlight – user20358

+0

Ok, bien je ne pense pas que la liaison fonctionnerait dans ce cas. Je peux me tromper – barrylloyd

+2

Dans ce cas, vous devrez d'une manière ou d'une autre transporter vos données vers le client, puis les lier aux objets client. Les liaisons ne sont pas si magiques, elles ne s'étendent pas sur Internet;) – Bubblewrap

Questions connexes