WPF ListView按子类分组时GroupStyle绑定子类属性失败求助
这个问题的核心原因是:GroupStyle的容器(GroupItem)的DataContext并不是你的CustomerDate实体对象,而是CollectionViewGroup类型。当你通过PropertyGroupDescription("Customerdetails")分组时,CollectionViewGroup的Name属性会被设置为分组依据的Customerdetails实例,而不是直接暴露实体的属性,这就是你直接绑定Customerdetails.Name失效的原因。
下面给你两种可行的解决方案:
方案一:保留原分组逻辑,调整绑定路径
不需要修改后台的分组规则,只需要修改GroupStyle里的绑定表达式,直接访问CollectionViewGroup的Name属性(也就是你的Customerdetails实例):
<TextBlock Text="{Binding Path=Name.Name}" />
这里第一个Name是CollectionViewGroup的属性,对应分组的Customerdetails实例,第二个.Name就是访问该实例的Name属性。
方案二:直接按子类属性分组(更简洁直观)
如果你的需求就是按Customerdetails.Name分组,可以直接修改后台的分组描述,让分组逻辑更贴合最终展示需求:
后台代码修改:
PropertyGroupDescription gd = new PropertyGroupDescription("Customerdetails.Name"); view.GroupDescriptions.Add(gd);
XAML中GroupStyle的绑定修改:
<TextBlock Text="{Binding Path=Name}" />
此时CollectionViewGroup的Name属性就是Customerdetails.Name的字符串值,直接绑定即可完成展示。
额外验证点
确认你的Customerdetails类属性是公开可绑定的(你代码里已经设置了public int Id { set; get; }这类公开属性,没问题),且数据源中的CustomerDate对象都已正确初始化_Customerdetails实例(你的构造函数里已经做了初始化,也没问题)。
内容的提问来源于stack exchange,提问作者Mamad

