2016-05-11 19 views
2

Ich versuche, die Elemente in einer Combobox in Gruppen zu organisieren. Dazu habe ich ein Objekt erstellt, das Strings für Projekt- und Gruppennamen enthält. Ich habe dann GroupStyle und ItemTemplate gesetzt, um diese Werte anzuzeigen. Derzeit wird jedoch nur der Projektstring in der Combobox angezeigt (und das Feld hat einen roten Rand, der auf eine Art von Fehler hinweist).Combobox zeigt keine Gruppierungen

Hier ist das XAML für meine Combobox:

<ComboBox x:Name="comboBoxProjects" Margin="165,90,28,0" Grid.Column="0" VerticalAlignment="Top" Height="25" 
    IsSynchronizedWithCurrentItem="True" SelectedIndex="0" Style="{StaticResource ComboBoxDefault}" 
    ItemsSource="{Binding Path=ProjectClientSelections.ProjectGroupItems,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
    SelectedItem="{Binding Path=ProjectClientSelections.SelectedProject, UpdateSourceTrigger=PropertyChanged}"> 

    <ComboBox.GroupStyle> 
     <GroupStyle> 
      <GroupStyle.HeaderTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding GroupName}"/> 
       </DataTemplate> 
      </GroupStyle.HeaderTemplate> 
     </GroupStyle> 
    </ComboBox.GroupStyle> 

    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Project}"/> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 

</ComboBox> 

Hat jemand sehen, wo ich falsch gehe?

Antwort

1

In GroupStyle ist der DataContext nicht Ihr Objekt (der in Ihrer ItemsSource enthaltene Typ), sondern ein CollectionViewGroup Objekt, das basierend auf der Sammlung von Elementen gebildet wird, die Sie gruppiert haben. Aus diesem Grund müssen Sie einen verbindlichen Pfad zu einer der Eigenschaften in CollectionViewGroup deklarieren, zum Beispiel basierend auf Ihrem Code, den Sie wahrscheinlich Name Eigenschaft verwenden möchten. Siehe MSDN CollectionViewGroup Class

ändern GroupStyle.HeaderTemplate dazu:

<DataTemplate> 
    <TextBlock Text="{Binding Name}" /> 
</DataTemplate> 

Sie zeigen nicht, wie Sie Ihre Groupdescriptions gebildet haben. Wenn Sie nicht die Einzelteile bereits gruppiert haben, können Sie es tun, in folgenden Weise (vorausgesetzt, die XAML Sie zur Verfügung gestellt haben, ist enthalten innerhalb Fenster und Fenster und GroupBox Datacontext ist gleich):

<Window.Resources> 
    <CollectionViewSource 
     Source="{Binding ProjectClientSelections.ProjectGroupItems}" 
     x:Key="GroupedProjectItems"> 
     <CollectionViewSource.GroupDescriptions> 
      <PropertyGroupDescription 
       PropertyName="GroupName" /> 
     </CollectionViewSource.GroupDescriptions> 
    </CollectionViewSource> 
</Window.Resources> 

Nach dieser Änderung GroupBoxItemSource Bindung zu folgenden (direkt zu CollectionViewSource Ressource):

ItemsSource="{Binding Source={StaticResource GroupedProjectItems}}" 
+0

Vielen Dank für die Hilfe! – fyodorfranz