2010-07-26 8 views
1

Existe-t-il un contrôle dans silverlight pour regrouper les contrôles ensemble pour la liaison de données. Par exemple, disons que j'ai un objet Person et que je veux afficher fname, lname, age, height, etc. dans TextBlocks. Existe-t-il un contrôle que je peux utiliser pour regrouper ces contrôles TextBlock ensemble et définir le ItemSource sur ce contrôle similaire à la façon dont vous définissez le ItemSource sur un DataGrid, puis lier chaque colonne?Contrôle Silverlight pour regrouper les autres contrôles ensemble pour la liaison de données

Répondre

0

Je pense que l'une de ces réponses est correcte, mais je ne pense pas que fonctionneront/sont app approprié pour mon application. L'approche MVVM est exagérée pour mon application et les deux autres approches ne fonctionneront pas pour moi pour diverses raisons. Je vais tout faire dans le code-behind.

0

Vous pouvez lire cet article sur MVVM http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

Il semble que vous devez créer un « PersonView » et un « PersonViewModel » (et probablement un « PersonCollectionViewModel ») Cela vous permettra de lier la contrôles sur votre "PersonView" (A Silverlight UserControl) à la "PersonViewModel".

2

Groupez les TextBlocks dans n'importe quel contrôle de disposition et liez DataContext du contrôle à Person. S'il n'est pas explicitement défini, le contexte de chaque TextBlock sera relatif au parent.

<UserControl DataContext=""> 
    <UserControl.DataContext> 
     <SomeViewModel /> 
    </UserControl.DataContext> 
    <Grid DataContext="{Binding ThePerson}"> 
     <TextBlock Text="{Binding fname}"/> 
     <TextBlock Text="{Binding lname}"/> 
     <TextBlock Text="{Binding age}"/> 
     <TextBlock Text="{Binding height}"/> 
    </Grid> 
</UserControl> 

Voir classe modèle ...

public class SomeViewModel 
{ 
    public Person ThePerson { get;set; } 
} 
+0

Ensuite, comment lier la grille à une instance spécifique de la personne? – PhilBrown

+0

Êtes-vous lié à la personne dans votre vue maintenant? Comment? Peut-être pourriez-vous clarifier un peu mieux ce que vous essayez d'accomplir. Cherchez-vous un contrôle réutilisable ou juste un moyen d'organiser logiquement la liaison? Avez-vous une seule personne ou une collection? L'hypothèse dans ma réponse est que vous avez une propriété publique Personne sur DataContext UserControl. Avec MVVM, ce contexte de données serait un modèle de vue. J'ai mis à jour le code pour mieux le démontrer. –

+0

J'ai peut-être mal compris ce que vous cherchez. Cette réponse fournirait un moyen de grouper les blocs de texte associés (un ContentControl avec un DataTemplate fonctionnerait de la même manière). Si vous cherchez un UserControl séparé pour encapsuler ceci, regardez dans la réponse de Ben. Si vous avez une collection de personnes, regardez dans un ItemsControl comme ListBox et définissez le DataTemplate. Les éléments dans le DataTemplate seront de même relatif. –

0

Vous pouvez utiliser DataForm contrôle et définissez sa « IsReadOnly » à True, ce contrôle habituellement utilisé pour modifier les données, et souvenez-vous de définir AutoGenerateFields = » True » ...

PS: Je suis en supposant que vous utilisez le service Ria avec silverlight

Questions connexes