首页 > 解决方案 > WPF Listview 按子类分组

问题描述

我有一个包含子类的类

public class CustomerDate
    {
        public string Date { set; get; }
        public Customerdetails _Customerdetails { set; get; }
        public CustomerDate()
        {
            _Customerdetails = new Customerdetails();
        }
    }

public class Customerdetails
{
    public int Id { set; get; }
    public string Name { set; get; }   
    public Customerdetails() { }
}

我有一个 CustomerDate 对象列表,我想绑定到按 subClass(Customerdetails) 分组的列表视图。我的问题是我可以在列表视图的 Gridview ({Binding Customerdetails.Name}) 中显示子类属性,但不能在 GroupStyle 部分显示子类详细信息。

 <TextBlock Text="{Binding  Path=Customerdetails.Name}" />

不工作但是

<GridViewColumn    DisplayMemberBinding="{Binding Customerdetails.Name}"

正在工作中。

任何想法?

List<CustomerDate> CustomerDateList = new List<CustomerDate>();
.
.
.                  

lv.ItemsSource = DBAccess.GetBadMonthlyPaymentCustomers();
                            CollectionView view =
(CollectionView)CollectionViewSource.GetDefaultView(lv.ItemsSource);

PropertyGroupDescription gd = new PropertyGroupDescription("Customerdetails");
view.GroupDescriptions.Add(gd);



 <ListView  x:Name="lv">
        <ListView.View>
            <GridView  x:Name="GridView" >            
                <GridViewColumn    DisplayMemberBinding="{Binding Date}"   />                
                <GridViewColumn    DisplayMemberBinding="{Binding Customerdetails.Name}"   />
            </GridView>
        </ListView.View>
        <ListView.GroupStyle>
            <GroupStyle>
                <GroupStyle.ContainerStyle>
                    <Style TargetType="{x:Type GroupItem}">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate>
                                    <Grid>
                                        <Grid.RowDefinitions>
                                            <RowDefinition Height="auto"/>
                                            <RowDefinition Height="auto"/>
                                        </Grid.RowDefinitions>
                                        <StackPanel Margin="0,10,0,0" Orientation="Horizontal">
                                            <TextBlock Text="{Binding  Path=Customerdetails.Name}" />                                          
                                        </StackPanel>
                                        <ItemsPresenter Grid.Row="1" />
                                    </Grid>                                    
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </GroupStyle.ContainerStyle>
            </GroupStyle>
        </ListView.GroupStyle>
    </ListView>      

标签: c#wpf

解决方案


a的DataContextaGroupItem是 aCollectionViewGroup而不是Customerdetails

一个组可能包含几个Customerdetails. 您可以使用 的属性绑定到其中Name任何一个的Items属性CollectionViewGroup,例如:

<TextBlock Text="{Binding Items[0].Name}" />           

推荐阅读