Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在DataGrid WPF中的某些条件后添加分隔符_C#_Wpf - Fatal编程技术网

C# 在DataGrid WPF中的某些条件后添加分隔符

C# 在DataGrid WPF中的某些条件后添加分隔符,c#,wpf,C#,Wpf,我正在制作一个聊天窗口,当一个新日期出现在绑定为datagrid项目源的列表的特定列中时,我想在其中添加一个水平分隔符。有可能吗?如果有,怎么可能? 任何帮助都将不胜感激 以下是我想做的: 刚刚选中,是的,您可以使用分组: a) 向表示消息的对象添加新属性。此属性将根据日期返回字符串值(类似于DayOfWeek.ToString();) b) 将您的收藏按此新属性分组(使用) c) 为组设置样式,大致如下所示(您需要添加画布或带有线条的东西,并可能将DockPanel的宽度绑定到其父宽度):

我正在制作一个聊天窗口,当一个新日期出现在绑定为datagrid项目源的列表的特定列中时,我想在其中添加一个水平分隔符。有可能吗?如果有,怎么可能? 任何帮助都将不胜感激

以下是我想做的:


刚刚选中,是的,您可以使用分组:

a) 向表示消息的对象添加新属性。此属性将根据日期返回字符串值(类似于
DayOfWeek.ToString();

b) 将您的收藏按此新属性分组(使用

c) 为组设置样式,大致如下所示(您需要添加画布或带有线条的东西,并可能将DockPanel的宽度绑定到其父宽度):



另外,如果你想用相同的模式对一周以上的邮件进行分组,那么这当然是行不通的。在这种情况下,您可以尝试按两个属性分组。不过,我会将所有内容都放在“older”中。

如果您提供代码示例,回答起来会更容易。事实上,如果列表实现了
INotifyPropertyChanged
接口,我可以建议处理
PropertyChanged
事件(如果没有,请确保它实现了)@NadiaChibrikova我刚刚写了聊天代码,还没有尝试任何分隔符的方法。因为我什么都想不出来。如果你想要聊天代码,我可以给你。我制作了一个3列的数据网格。其中两列显示了图片和消息,第三列显示了,我正在显示时间。我想做的是在列表中的每个新日期后添加一个分隔符谢谢,现在它有意义了,忽略我之前的评论吧。从逻辑上讲,您希望对消息进行分组,因此我想您可以在不使用扩展器的情况下创建分组元素,所以应该可以。@NadiaChibrikova您能告诉我如何使第二个组有条件吗?哪一个组?在什么意义上是有条件的?
  <DataGrid.GroupStyle>
            <GroupStyle>
                <GroupStyle.ContainerStyle>
                    <Style TargetType="{x:Type GroupItem}">
                        <Setter Property="Margin" Value="0,0,0,5"/>
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type GroupItem}">
                                    <StackPanel>
                                        <DockPanel LastChildFill="True">
                                            <TextBlock Text="{Binding Path=Name}" DockPanel.Dock="Right"/>
                                            <!-- here comes the line -->
                                        </DockPanel>
                                        <ListBox>
                                            <ListBox.Items>
                                                <ItemsPresenter />
                                            </ListBox.Items>
                                        </ListBox>
                                    </StackPanel>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </GroupStyle.ContainerStyle>
            </GroupStyle>              
        </DataGrid.GroupStyle>