首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Listview中分组表头的重复

Listview中分组表头的重复
EN

Stack Overflow用户
提问于 2017-03-14 14:05:52
回答 3查看 130关注 0票数 4

我有一个简单的聊天应用程序。我将所有聊天消息存储在Listview中。我正在根据聊天的发送日期对聊天进行分组。当它第一次从数据库获取时,它正确地显示了所有聊天消息的日期,但如果我们添加新的聊天消息来列出分组标题,则会重复相同日期的新消息。我使用绑定到Listview的observable集合来存储聊天消息。

下面是xaml的代码

代码语言:javascript
复制
<ListView.GroupStyle>
    <GroupStyle>
        <GroupStyle.HeaderTemplate>
            <DataTemplate>
                <StackPanel HorizontalAlignment="Center">
                    <TextBlock Foreground="#2c7cb8" FontSize="14" 
                     Text="{Binding Name }" />
                </StackPanel>
            </DataTemplate>
        </GroupStyle.HeaderTemplate>
    </GroupStyle>
</ListView.GroupStyle>

和.cs文件的代码

代码语言:javascript
复制
CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(
                       chatList.ItemsSource); 
view.GroupDescriptions.Add(new PropertyGroupDescription("Date"));
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-16 14:27:03

因为从评论中我意识到OP是按错误的数据类型进行分组的,所以建议如下:

代码语言:javascript
复制
    //your existing code, I will not break it
    public string Date { get; }

    //change group by property to the following
    public DateTime RealDate
    {
        get
        {
            DateTime dt = Convert.ToDateTime(this.Date).Date;
            return dt;
        }
    }
票数 2
EN

Stack Overflow用户

发布于 2017-03-15 05:41:57

您可以尝试启用实时分组:

代码语言:javascript
复制
ICollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(chatList.ItemsSource);
view.GroupDescriptions.Add(new PropertyGroupDescription("Date"));

ICollectionViewLiveShaping liveView = view as ICollectionViewLiveShaping;
if(view != null)
{
    liveView.IsLiveGrouping = true;
    liveView.LiveGroupingProperties.Add("Date");
}

或者,您也可以在添加新项目时刷新视图:

代码语言:javascript
复制
view.Refresh();
票数 0
EN

Stack Overflow用户

发布于 2019-08-07 05:04:28

在public声明中添加public bool:

代码语言:javascript
复制
/// Public Variable declarations

 public bool ViewSetSwitch = false;

然后在您的代码行中:

代码语言:javascript
复制
view.GroupDescriptions.Add(new PropertyGroupDescription("Date"));   

添加:

代码语言:javascript
复制
// Checks if ViewSetSwitch is false and if so, runs the command
if (!ViewSetSwitch) view.GroupDescriptions.Add(new PropertyGroupDescription("Date"));

// set ViewSetSwitch to true so the command won't run again causing the headers to add again
ViewSetSwitch=true;

这就是我解决这个问题的方法!

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

https://stackoverflow.com/questions/42778808

复制
相关文章

相似问题

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