GroupStyles如何工作?

| 我有一个ListView控件绑定到ViewModel中的“ 0”。 我想尝试对这些项目进行分组,但是有一些问题。 我首先在VM中设置了属性分组,然后添加了一个“ 1”。 C#:
ListCollectionView.GroupDescriptions.Add(new PropertyGroupDescription(\"Category\"));
XAML:
<ListView.GroupStyle>
    <GroupStyle>
        <GroupStyle.HeaderTemplate>
            <DataTemplate>
                 <TextBlock Text=\"{Binding Path=Name}\"/>
            </DataTemplate>
        </GroupStyle.HeaderTemplate>
    </GroupStyle>
</ListView.GroupStyle>
但是,列表现在只是类别名称,无法查看项目本身。 我不是真的完全了解这里发生了什么。当我为ѭ1创建模板时,我真正绑定到的是什么?除了
Name
还有其他属性吗? 我只是将“ 1”添加到已经创建的ListView中,例如,其中包括“ 7”。那是与ѭ1混淆的东西吗? 如果列表中的项目属于另一个类,而我不想根据它们所属的类的实例(具有ID)进行分组怎么办?然后,我会将组名作为此父类的属性。那可能吗? 部分解决方案: 问题在于应用于ListView的样式。我不知道这种风格是什么。 完整解决方案 我没有在列表框“ 10”中使用“ 9”,而是选择了将“ 11”设置为“ 12”的面板。看来必须使用ItemsPresenter才能使GroupStyling正常工作。     
已邀请:
我认为错误出在代码的其他地方。 通常,您在ViewModel上公开一组Models
namespace Derp
{
    public sealed class ViewModel
    {
      public ObservableCollection<Model> Items {get;set;}
      // initialization code not shown
    }

    public sealed class Model
    {
      public string GroupName {get;set;}
      public string ModelName {get;set;}
    }
}
在视图中,将CollectionViewSource绑定到此集合:
<Window.DataContext>
    <ViewModel xmlns=\"clr-namespace:Derp\" />
</Window.DataContext>
<Window.Resources>
    <CollectionViewSource
        Source=\"{Binding Items}\"
        x:Key=\"GroupedItems\">
        <CollectionViewSource.GroupDescriptions>
            <PropertyGroupDescription
                PropertyName=\"GroupName\" />
        </CollectionViewSource.GroupDescriptions>
    </CollectionViewSource>
</Window.Resources>
接下来,我们将列表控件绑定到此CollectionViewSource(在此示例中使用组合键):
<ComboBox
    ItemsSource=\"{Binding Source={StaticResource GroupedItems}}\"
    DisplayMemberPath=\"ModelName\">
    <ComboBox.GroupStyle>
        <GroupStyle>
            <GroupStyle.HeaderTemplate>
                <DataTemplate>
                    <TextBlock
                        Text=\"{Binding Name}\" />
                </DataTemplate>
            </GroupStyle.HeaderTemplate>
        </GroupStyle>
    </ComboBox.GroupStyle>
</ComboBox>
令人困惑的地方是,在GroupStyle中,您没有绑定到Model,而是绑定到了一组Models(在此例中,属性\ GroupName \)分组。 CollectionViewSource将您的模型分组为扩展CollectionViewGroup的集合。这些组具有一个名为
Name
的属性,该属性包含对模型进行分组的公用值(
GroupName
属性的值)。因此,在HeaderTemplate中,您将绑定到CollectionViewGroup.Name。     

要回复问题请先登录注册