
我有一个简单的聊天应用程序。我将所有聊天消息存储在Listview中。我正在根据聊天的发送日期对聊天进行分组。当它第一次从数据库获取时,它正确地显示了所有聊天消息的日期,但如果我们添加新的聊天消息来列出分组标题,则会重复相同日期的新消息。我使用绑定到Listview的observable集合来存储聊天消息。
下面是xaml的代码
<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文件的代码
CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(
chatList.ItemsSource);
view.GroupDescriptions.Add(new PropertyGroupDescription("Date"));发布于 2017-03-16 14:27:03
因为从评论中我意识到OP是按错误的数据类型进行分组的,所以建议如下:
//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;
}
}发布于 2017-03-15 05:41:57
您可以尝试启用实时分组:
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");
}或者,您也可以在添加新项目时刷新视图:
view.Refresh();发布于 2019-08-07 05:04:28
在public声明中添加public bool:
/// Public Variable declarations
public bool ViewSetSwitch = false;然后在您的代码行中:
view.GroupDescriptions.Add(new PropertyGroupDescription("Date")); 添加:
// 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;这就是我解决这个问题的方法!
https://stackoverflow.com/questions/42778808
复制相似问题