2017-06-01 6 views
1

Ich habe eine Klasse in meiner Anwendung mit drei Eigenschaften GroupName, ItemName und Data. Ich habe eine ListView, um eine Sammlung dieser Klassen von GroupName zu gruppieren und ihre ItemName Eigenschaft in einem Textfeld anzuzeigen. Das Problem ist, dass die Gruppen korrekt angezeigt werden, wenn ich den Code ausführe, aber keiner von ihnen zeigt Mitglieder an. HierWarum sind Gruppen in WPF ListView leer?

ist der XAML-Code:

<ListView x:Name="MyList"> 
    <ListView.GroupStyle> 
     <GroupStyle> 
      <GroupStyle.ContainerStyle> 
       <Style TargetType="{x:Type GroupItem}"> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate> 
           <Expander IsExpanded="True"> 
            <Expander.Header> 
             <TextBlock FontWeight="Bold" Text="{Binding Name}"/> 
            </Expander.Header> 
           </Expander> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </GroupStyle.ContainerStyle> 
     </GroupStyle> 
    </ListView.GroupStyle> 
    <ListView.ItemTemplate> 
     <DataTemplate DataType="{x:Type testProgram:MyClass}"> 
      <TextBlock Text="{Binding ItemName}"/> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

Und hier ist der Code hinter:

public partial class MyListView 
{ 
    public MyListView(ObservableCollection<MyClass> items) 
    { 
     InitializeComponent(); 
     Items = items; 

     var v = CollectionViewSource.GetDefaultView(Items); 
     v.GroupDescriptions.Add(new PropertyGroupDescription("GroupName")); 
     MyList.ItemsSource = v; 
    } 

    public ObservableCollection<MyClass> Items { get; set; } 
} 

Wenn ich die <ListView.GroupStyle>... entfernen und setzen MyList.ItemsSource = Items; dann alles richtig erscheint. Ich vermute, dass das Problem zwischen ItemsSource = v, DataType = "{x:Type testProgram:MyClass}" und {Binding ItemName} ist, aber ich weiß nicht, was bricht oder wie es zu beheben ist.

Antwort

0

Ihre ControlTemplate fehlt eine ItemsPresenter. WPF verwendet einen ItemsPresenter in der GroupItem Vorlage, um den Speicherort zu markieren, an dem die tatsächlichen Elemente platziert werden, wenn die Vorlage erweitert wird. Da Sie keinen Präsentator haben, werden die Detailelemente nicht angezeigt.

Versuchen Sie Ihre Vorlage diese zu ändern:

<Expander IsExpanded="True"> 
    <Expander.Header> 
     <TextBlock FontWeight="Bold" Text="{Binding Name}"/> 
    </Expander.Header> 
    <Expander.Content> 
     <ItemsPresenter /> 
    </Expander.Content> 
</Expander> 
+0

, dass es war. Vielen Dank! – Kevlarz