WPF ListView.GroupStyle不显示组头

时间:2014-01-14 17:15:53

标签: c# wpf xaml listview

我有以下xaml:

<ListView Name="lstCurrentAccounts">
    <ListView.View>
        <GridView x:Name="grvCurrentAccounts" AllowsColumnReorder="True">
            <GridViewColumn DisplayMemberBinding="{Binding AccountName}" Width="Auto" Header="Account Name" />
            <GridViewColumn DisplayMemberBinding="{Binding ReconciledBalance}" Width="Auto" Header="Reconciled" />
            <GridViewColumn DisplayMemberBinding="{Binding Balance}" Width="Auto" Header="Balance" />
        </GridView>
    </ListView.View>
    <ListView.GroupStyle>
        <GroupStyle>
            <GroupStyle.HeaderTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Name}" />
                </DataTemplate>
            </GroupStyle.HeaderTemplate>
        </GroupStyle>
    </ListView.GroupStyle>
</ListView>

以下代码隐藏:

private void updateData()
{
    MyContext dc = new MyContext();
    var c = (from x in dc.Accounts select x).ToList();
    lstCurrentAccounts.ItemsSource = c;

    CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(lstCurrentAccounts.ItemsSource);
    PropertyGroupDescription groupDescription = new PropertyGroupDescription("AccountTypeName");

    view.GroupDescriptions.Add(groupDescription);

    var r = (from x in dc.RepeatingTransactions where x.Deleted == false orderby x.NextOccurence select x).Take(10).ToList();
    lstRepeating.ItemsSource = r;

}

现在,这应显示一个ListView,其数据按“AccountTypeName”分组,这是每个Account元素的字符串属性。当我运行应用程序时,数据被正确分组,但GroupStyle.HeaderTemplate中定义的组Header为空,而不是显示相应的AccountTypeName。

我做错了什么?

3 个答案:

答案 0 :(得分:2)

好的,我有解决方案和解释。 我有两个表AccountType和Account,由1-many关系链接。 AccountType字段存在于AccountType中,但它是Account中的非支架(使用EF)只读属性,并引用相应的AccountType并从AccountType表中提取AccountTypeName(仍然与我一起?)现在这个字段,AccountTypeName在帐户似乎没有得到评估,所以我已将代码中的行更改为:

PropertyGroupDescription groupDescription = new PropertyGroupDescription("AccountType");

在Xaml中,我已将相应的行更改为:

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

现在要求我在AccountType表中覆盖ToString(),它只返回AccountTypeName字段,该字段现在显示为组头。

答案 1 :(得分:0)

我认为TextBlock应该绑定到AccountTypeName而不是Name。

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

答案 2 :(得分:0)

我认为您需要将CollectionViewSource分配给lstCurrentAccounts的ItemSource而不是原始数据。 CollectionViewSource准备用于排序和分组的数据。