2009-10-30 4 views
0

Permettez-moi d'abord de décrire mon objectif: J'ai créé un objet avec 3 propriétés: début, fin et heure. J'ai créé un ObservableCollection de 8 de ces propriétés, il ressemble à ceci:Liaison de la valeur d'affichage des propriétés d'une collection à une zone de liste déroulante

//C# 
internal class MyObjects : ObservableCollection<MyObjectSetting> 
     { 
      public MyObjects() 
       : base() 
      { 
       Add(new MyObjectSetting(
          start1, 
          end1, 
          time1); 
       Add(new MyObjectSetting(
          start2, 
          end2, 
          time2); 
    (etc) 
      } 
     } 

Je voudrais avoir 3 ComboBoxes qui se lient aux propriétés individuelles énumérées dans ces 8 objets, donc ComboBoxes ressembleraient « start1 , start2, ... start8 "," end1, end2, ... end8 ".

Le code suivant lie avec succès le contrôle ComboBox aux objets eux-mêmes, mais je suis bloqué quant à la façon d'accéder aux propriétés individuelles de chaque zone de liste déroulante.

// WPF 
    <Grid> 
     <Grid.Resources> 
      <local:MyObjects x:Key="myMyObjects"/> 
     </Grid.Resources> 

     <ComboBox x:Name="cbxStartPosition" 
        Grid.Row="0" 
        Grid.Column="3" 
        ItemsSource="{Binding Source={StaticResource myMyObjects}}"     
        > 
    </Grid> 

quelqu'un peut me aider à déterminer comment lier les propriétés des objets stockés dans la collection à la valeur d'affichage représenté dans la zone de liste déroulante?

J'ai essayé d'ajouter un DataTemplate pour la ListBoxinvestigating l'échantillon MultiBinding sur MSDN here comme indiqué ci-dessous, mais recevoir une erreur ci-dessous:

//WPF 
     <DataTemplate x:Key="StartPositionTemplate"> 
      <ListBox> 
       <MultiBinding Converter="{StaticResource myNameConverter}"> 
        <Binding Path="FirstName"/> 
        <Binding Path="LastName"/> 
       </MultiBinding> 
      </ListBoxItem> 
     </DataTemplate> 

Erreur 32 Une valeur de type « DataTemplate » ne peut pas être ajouté à une collection ou un dictionnaire de type 'UIElementCollection'.


Cette erreur a été déclenchée car je n'étais pas dans la section XAML. Les gens HTH dans le futur. L'utilisation d'un DataTemplate était la solution, selon la réponse ci-dessous.


Si DataTemplate n'est pas la voie à suivre, ce que quelqu'un sait ce qui serait une meilleure façon d'aborder ce sujet?

Répondre

2

Si vous essayez juste d'afficher la valeur de chaîne d'une propriété, vous pouvez utiliser DisplayMemberPath:

<ComboBox ItemsSource="{Binding Source={StaticResource myMyObjects}}" DisplayMemberPath="Start"/> 

Pour des scénarios plus complexes, vous pouvez utiliser un modèle d'élément personnalisé:

<ComboBox ItemsSource="{Binding Source={StaticResource myMyObjects}}"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding Start}"/> 
       <TextBlock Text="{Binding End}"/> 
      </StackPanel> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 
+0

C'est * exactement * ce que je cherchais. Merci beaucoup - j'ai utilisé le deuxième scénario complexe, je vais creuser plus profondément dans ItemTemplates pour comprendre ce qui se passe pour les travaux futurs. Bon travail! – CrimsonX

Questions connexes