none
在WPF中DataGrid的分组技术中,能否实现对GroupItem添加特定数据类型绑定 RRS feed

  • 问题

  • 问题如下,我所使用的是DataGrid来展示数据,使用了DataGrid的分组技术来对数据进行分组显示。

    我的问题是,我想让订单总金额的位置动态计算出在该组订单的金额之和,并予以显示,但是这个显示的位置是在GroupItem中,GroupItem代码如下:

    <GroupStyle.ContainerStyle>
        <Style TargetType="{x:Type GroupItem}">
            <Setter Property="Template">
                <Setter.Value>
                   <ControlTemplate TargetType="{x:Type GroupItem}">
                       <Expander IsExpanded="True">
                           <Expander.Header>
                               <StackPanel Orientation="Horizontal" >
                                    <TextBlock Name="GroupName" Text="{Binding Path=Name}"/>
                                    <TextBlock Text="     订单明细项:" />
                                    <TextBlock Name="GroupCount" Text="{Binding Path=ItemCount}"/>
                                    <TextBlock Text="     当前订单总金额:"/>
                                    <TextBlock Name="GroupSum" Text="{Binding Path=sum,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
                                    <TextBlock Name="nameGroup" Text="{Binding Path=groupId,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
                                </StackPanel>
                                </Expander.Header>
                                <ItemsPresenter/>
                             </Expander>
                          </ControlTemplate>
                      </Setter.Value>
                   </Setter>
               </Style>
    </GroupStyle.ContainerStyle>


    目前没有太好的解决思路,曾经尝试通过利用VisualTreeHelper来找到数据,进行强制的设定,但是存在对数据刷新时,文本框的数据会消失,那么我现在想实现对数据进行某种绑定,但是无法找到GroupItem的数据源,因此没有进行下去;

    如果您有尝试过这样的方案或者有比较好的思路来解决这一问题,希望得到您的回答,在这里,先表示感谢。O(∩_∩)O~

    这是第一次使用MSDN论坛。。突然提示不能再提问中添加图片。。顺便再问下我该如何做= = ,才能把图片顺利上传上来


    2015年10月5日 15:37

答案

  • 你可以直接邦定到Items上,然后设计一个Converter来读取当前GroupItems然后进行汇总计算

    
    <TextBlock Text="{Binding Path=Items, Converter={StaticResource groupsConverter}}" />

    converter:

    public class MyConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value is ReadOnlyObservableCollection<Object>)
            {
                var items = (ReadOnlyObservableCollection<Object>)value;
                foreach (GroupItem gi in items)
                {
                    //// To calculate with  gi.XXXXXX property
                }
                return "xxxxx";
            }
            return "";
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return value;
        }
    }


    Bob Bao

    Do you still use the same Windows 8 LockScreen always? Download Chameleon Win8 App quickly, that changes your LockScreen constantly.
    你是否还在看着一成不变的Windows 8锁屏而烦恼,赶紧下载这个 百变锁屏 应用,让你的锁屏不断地变化起来。

    2015年10月8日 2:42
    版主

全部回复

  • 你可以直接邦定到Items上,然后设计一个Converter来读取当前GroupItems然后进行汇总计算

    
    <TextBlock Text="{Binding Path=Items, Converter={StaticResource groupsConverter}}" />

    converter:

    public class MyConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value is ReadOnlyObservableCollection<Object>)
            {
                var items = (ReadOnlyObservableCollection<Object>)value;
                foreach (GroupItem gi in items)
                {
                    //// To calculate with  gi.XXXXXX property
                }
                return "xxxxx";
            }
            return "";
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return value;
        }
    }


    Bob Bao

    Do you still use the same Windows 8 LockScreen always? Download Chameleon Win8 App quickly, that changes your LockScreen constantly.
    你是否还在看着一成不变的Windows 8锁屏而烦恼,赶紧下载这个 百变锁屏 应用,让你的锁屏不断地变化起来。

    2015年10月8日 2:42
    版主
  • 收到,感谢,我测试一下。。多谢~
    2015年10月8日 6:47
  • 请问这个数据转换可以传入两个参数么,因为Items是我现在所有的数据源,没有另外数据的辅助我不知道应该返回哪个分组的数据源。。。
    2015年10月9日 3:24