首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF CollectionViewSource分组

WPF CollectionViewSource分组
EN

Stack Overflow用户
提问于 2010-10-09 04:47:07
回答 2查看 20.1K关注 0票数 7

我正在使用CollectionViewSource对我的数据进行分组。在我的数据中,我需要对Property1Property2进行分组。

唯一的规定是我不想要另一个组的子组。所以,当我用这两个属性分组时,我不想让它成为Property2,因为它是Property1的组的一个子组。

之所以要这样做,是因为我需要一个标头来显示以下信息:

标题:

代码语言:javascript
复制
<TextBlock.Text>
  <MultiBinding StringFormat="Property1: {0}, Property2: {1}">
    <Binding Path="Property1"/>
    <Binding Path="Property2"/>
  </MultiBinding>
</TextBlock.Text>

我已经在我的CollectionViewSource上尝试过了,但无法将组和子组“组合”在一起:

代码语言:javascript
复制
<CollectionViewSource x:Key="myKey" Source="{Binding myDataSource}">
  <CollectionViewSource.GroupDescriptions>
    <PropertyGroupDescription PropertyName="Property1" />
    <PropertyGroupDescription PropertyName="Property2" />
  </CollectionViewSource.GroupDescriptions>
</CollectionViewSource>

是否可以将两个属性组合在一起?类似于下面的内容?

代码语言:javascript
复制
<CollectionViewSource x:Key="myKey" Source="{Binding myDataSource}">
  <CollectionViewSource.GroupDescriptions>
    <PropertyGroupDescription PropertyName="Property1,Property2" />
  </CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-14 18:35:57

实际上,您也可以在转换器上使用一些技巧,而不是在对象中创建另一个新属性。点('.')就是把整个对象传递给你的转换器。所以你可以在那里做任何逻辑算法,而不是在你的原始对象中创建新的属性。

代码语言:javascript
复制
<CollectionViewSource x:Key="myKey" Source="{Binding myDataSource}">
    <CollectionViewSource.GroupDescriptions>
         <PropertyGroupDescription PropertyName="." 
                     Converter="{StaticResource Property1AndProperty2}" />
     </CollectionViewSource.GroupDescriptions>
</CollectionViewSource>

在您的转换器中,类似于:

代码语言:javascript
复制
public class WidthAndHeightMixer : IValueConverter
{
      public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
      {
            if (value is YourObject)
            {
                  return (value as YourObject).Property1 + (value as Inventory).Property2
            }
      }
      ......
票数 22
EN

Stack Overflow用户

发布于 2011-03-04 00:41:23

您可以将这些属性组合到数据对象上的一个属性中。例如:

代码语言:javascript
复制
public class Person
{
    public Person()
    {
        IsActive = true;
    }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public Boolean IsActive { get; set; }
    public string LastNameIsActive
    {
        get { return LastName + IsActive.ToString(); }
    }
}
代码语言:javascript
复制
<Grid.Resources>
    <CollectionViewSource  x:Key="view" Source="{StaticResource persons}">
        <CollectionViewSource.SortDescriptions>
            <cm:SortDescription PropertyName="LastName" Direction="Ascending"/>
            <cm:SortDescription PropertyName="IsActive" Direction="Ascending"/>
        </CollectionViewSource.SortDescriptions>
        <CollectionViewSource.GroupDescriptions>
            <PropertyGroupDescription PropertyName="LastNameIsActive"/>
        </CollectionViewSource.GroupDescriptions>
    </CollectionViewSource>
</Grid.Resources>
<ListView  ItemsSource="{Binding Source={StaticResource view}}">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="FirstName" DisplayMemberBinding="{Binding FirstName}"/>
            <GridViewColumn Header="LastName" DisplayMemberBinding="{Binding LastName}"/>
        </GridView>
    </ListView.View>
    <ListView.GroupStyle>
        <GroupStyle >
            <GroupStyle.HeaderTemplate>
                <DataTemplate>
                    <TextBlock Background="Gray" DataContext="{Binding Items}">
                        <TextBlock.Text>
                            <MultiBinding  StringFormat="Is Active: {0} Last Name: {1}">
                                <Binding Path="IsActive"/>
                                <Binding Path="LastName"/>
                            </MultiBinding>
                        </TextBlock.Text>
                    </TextBlock>
                </DataTemplate>
            </GroupStyle.HeaderTemplate>
        </GroupStyle>
    </ListView.GroupStyle>
</ListView>

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3894195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档