Ing*_*als 7 wpf xaml grouping listview collectionview
我有一个ListView控件绑定到ListCollectionViewViewModel中的a.
我想尝试将这些项目分组,但遇到一些问题.
我在VM中设置属性分组以开始,然后添加一个GroupStyle.
C#:
ListCollectionView.GroupDescriptions.Add(new PropertyGroupDescription("Category"));
Run Code Online (Sandbox Code Playgroud)
XAML:
<ListView.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Name}"/>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ListView.GroupStyle>
Run Code Online (Sandbox Code Playgroud)
但是列表现在只是类别名称,无法查看项目本身.
我并不完全理解这里发生了什么.当我为GroupStyle我真正绑定的内容创建一个模板时?除此之外还有其他房产Name吗?
我刚刚添加GroupStyle到我已经创建的ListView中,例如我包含了一个ItemTemplate.那是什么东西搞乱了GroupStyle吗?
如果列表中的Items属于另一个类,并且我不想根据它们所属的类的实例(它有一个ID)进行分组.然后我将组名作为此父类的属性.那可能吗?
部分解决方案:
问题在于ListView上应用的样式.我不知道风格如何干扰.
完整的解决方案
我没有ItemsPresenter在我的列表框中ControlTemplate使用选择使用IsItemsHost设置为的Panel true.似乎ItemsPresenter必须用于GroupStyling才能正常工作.
小智 16
我认为错误在于代码中的其他地方.
通常,您在ViewModel上公开了一组模型
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;}
}
}
Run Code Online (Sandbox Code Playgroud)
在View中,将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>
Run Code Online (Sandbox Code Playgroud)
接下来,我们将列表控件绑定到此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>
Run Code Online (Sandbox Code Playgroud)
令人困惑的地方是,在GroupStyle中,你没有绑定你的模型,你绑定了一组模型,这些模型被分组(在这种情况下)属性" GroupName ".该CollectionViewSource组的型号为扩展集合CollectionViewGroup.这些组具有一个名为的属性Name,该属性包含模型分组的公共值(GroupName属性的值).因此,在HeaderTemplate中,您绑定到CollectionViewGroup.Name.
| 归档时间: |
|
| 查看次数: |
7926 次 |
| 最近记录: |