2009-04-03 7 views
1

Ceci est sans aucun doute une question nouvelle, mais j'ai cherché une réponse en vain. Ma configuration est simple: j'ai un contrôle ListBox défini en XAML et un ObservableCollection<MyClass> dans la même classe. Je lie le ObservableCollection<MyClass> au contrôle ListBox.Silverlight - Liaison avec ObservableCollections

Dans la hiérarchie de ce ListBox en XAML, je veux lier à un objet MyClass donné, pas à une propriété enfant de l'objet MyClass.

Pour clarifier, je XAML qui ressemble à ce qui suit (je lie le ObservableCollection dans le code):

<ListBox x:Name="MyListBox"> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <MyControls:SpecialControl MyClassObj="{Binding !!!}" /> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
    </ListBox> 

Il y a sûrement un moyen d'obtenir à l'objet d'un ObservableCollection plutôt que d'être obligé de se lier à l'une de ses propriétés enfantines.

Répondre

3

Vous ne devez pas spécifier un Path si vous souhaitez utiliser l'objet lié lui-même:

<ListBox x:Name="MyListBox"> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <MyControls:SpecialControl MyClassObj="{Binding}" /> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

BTW: Au lieu de votre propriété personnalisée, vous pouvez utiliser la propriété DataContext de votre commande pour lier le contrôle à l'objet:

<ListBox x:Name="MyListBox"> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <MyControls:SpecialControl DataContext="{Binding}" /> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+0

Merci! Vous semblez avoir lu dans mes pensées en suggérant que je lie directement à DataContext. Cela ne m'est jamais venu à l'esprit, mais c'est exactement ce que je veux faire. – JubJub

0

en plus spécifiant le chemin de liaison dans votre XAML vous devez lier votre collection à la zone de liste.

C#

ObservableCollection<MyClass> myCollection = new ObservableCollection<MyClass>(); 
MyListBox.DataContext = myCollection; 

Le XAML vous avez utilisé ne sera pas particulièrement utile, sauf si vous avez overriden la méthode ToString sur MyClass. Même si vous dites que vous n'êtes pas êtes-vous sûr que ce n'est pas une propriété de MyClass que vous voulez lier? Je ne vois pas pourquoi vous voudriez vous lier directement à un objet de collection.

XAML

<ListBox x:Name="MyListBox"> 
    <ListBox.ItemTemplate>  
     <DataTemplate>  
      <MyControls:SpecialControl MyClassObj="{Binding Path=MyClassProperty}" />  
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+0

Le contrôle spécial doit lier les propriétés de l'objet à certains de ses éléments enfants. Peut-être que je fais cela de façon impropre, mais je ne vois pas une meilleure méthode si je veux que le SpecialControl soit autonome. – JubJub

+0

cela n'a aucun sens pour moi. Comment MyClassProperty lie-t-il le xaml au code C#? – xarzu

Questions connexes