我的应用程序中有一个类有三个属性GroupName
,ItemName
和Data
。我有一个ListView
来按GroupName
对这些类的集合进行分组,并在文本框中显示其ItemName
属性。问题是,当我运行代码时,组正确显示但没有一个显示任何成员。
这是xaml代码:
<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>
这是背后的代码:
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; }
}
当我删除<ListView.GroupStyle>...
并设置MyList.ItemsSource = Items;
时,所有内容都会正常显示。
我怀疑问题出在ItemsSource = v
,DataType = "{x:Type testProgram:MyClass}"
和{Binding ItemName}
之间,但我不知道有什么问题或者如何修复它。
答案 0 :(得分:0)
您的ControlTemplate
缺少ItemsPresenter
。 WPF使用ItemsPresenter
模板中的GroupItem
来标记展开模板时实际商品的放置位置。由于您没有演示者,因此不会显示详细信息。
尝试将模板更改为:
<Expander IsExpanded="True">
<Expander.Header>
<TextBlock FontWeight="Bold" Text="{Binding Name}"/>
</Expander.Header>
<Expander.Content>
<ItemsPresenter />
</Expander.Content>
</Expander>