2010-12-26 1 views
0

Je suis un débutant dans ce domaine de la liaison de données Silverlight. Je commence à comprendre à quel point cette méthode de liaison de données est générique. Pour l'essayer, je dans mon listbox ce Page.xaml:Définition de DataContext dans une Listbox de manière déclarative

<ListBox Height="100" Name="lbCategories" Width="236" HorizontalAlignment="Left" Margin="20,0,0,0" SelectionMode="Multiple" ItemsSource="{Binding Categories}" DisplayMemberPath="Name" /> 

Dans mes Page.xaml.cs J'ai une propriété publique appelée Catégories du ObservableCollection type.

Il fonctionne si cette ligne suivante est présente dans mon dossier CS:

DataContext = this; 

Mais je veux éviter tout databinding programatically. Je voudrais définir le DataContext à "this" dans mon élément ListBox declarativelly. Y a-t-il un moyen de le faire?

Merci, Oscar

Répondre

3

Le fait que le code de programmation que vous essayez de remplacer est:

DataContext = this; 

signifie que vous essayez de régler le DataContext de la zone de liste à un élément d'interface utilisateur, ce qui est la façon dont la façon dont DataContext est normalement utilisé . Si vous avez des propriétés exposées par un élément d'interface utilisateur, vous n'avez pas du tout besoin d'utiliser DataContext, il suffit de lier directement à l'élément. Ainsi, au lieu de:

ItemsSource="{Binding Categories}" 

utilisation:

ItemsSource="{Binding Categories, ElementName=mainWindow}" 

où mainWindow est le nom de l'élément visé par "" ci-dessus, et laisser DataContext unset.

Si pour une raison quelconque, vous ne vouliez utiliser DataContext cette façon, vous pouvez utiliser cet attribut sur la zone de liste:

DataContext="{Binding ElementName=mainWindow}" 

pour régler le DataContext à l'élément correspondant à votre fichier code-behind.

+0

Salut! Merci pour votre réponse, c'est exactement ce que je cherchais! brève explication il n'y a qu'un seul écart manquant:. la propriété Catégories est dans mon fichier Page.xaml.cs (? est-ce ainsi que cela est fait dans Silverlight) Je dois ajouter le ElementName prop ainsi: ElementName = page, Mais si je le fais, je les éléments ne sont pas affichés. :(Désolé si la question est stupide :( – JSBach

+1

Si votre page n'a pas encore de nom, donnez-en un:

+0

Super, merci, ça marche! – JSBach

1

Bind à une ressource statique que vous définissez dans le XAML comme dans this example.

+0

Salut! Merci! Je ne voudrais pas créer une classe supplémentaire pour garder ma liste de catégories, c'est ce qui m'empêche de faire comme vous l'avez indiqué :( – JSBach

Questions connexes