为什么WPF ListView中的组为空?

时间:2017-06-01 17:27:26

标签: c# wpf xaml listview data-binding

我的应用程序中有一个类有三个属性GroupNameItemNameData。我有一个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 = vDataType = "{x:Type testProgram:MyClass}"{Binding ItemName}之间,但我不知道有什么问题或者如何修复它。

1 个答案:

答案 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>