C# 可观测集合的倒序
我有一个包含自定义对象的ObservableCollection。 通常情况下,项目会添加到列表的末尾 我要找的是: 从列表开始添加的项目。 这可能只显示在UI中,我的整个程序已经在使用此列表中的数据位置。因此,它内部的对象可能不会改变隐藏代码中的顺序。 此ObservableCollection保存自定义样式的按钮对象。这些按钮显示在一个列表框和一个水平布局的StackPanel中,这样按钮就可以很好地排列在一起 问题: 创建的每个按钮都会收到一个日期时间。新添加的按钮的日期总是比之前的按钮的日期晚。所有的计算都是在一个时间段内进行的,并且每秒都在运行 所以这次我基本上是在分类,但在3个按钮之后,突然一个按钮被放置在右手边而不是左手边 例如: Btn3:14:15:45正确Btn4:14:16:00错误Btn2:14:15:32正确Btn1:14:04:17正确 前3个按钮每次都会正确添加到列表的开头。突然,第四项被添加到第二位。似乎并不总是比较时间?每次创建按钮时,都会调用CollectionViewSource方法C# 可观测集合的倒序,c#,wpf,observablecollection,C#,Wpf,Observablecollection,我有一个包含自定义对象的ObservableCollection。 通常情况下,项目会添加到列表的末尾 我要找的是: 从列表开始添加的项目。 这可能只显示在UI中,我的整个程序已经在使用此列表中的数据位置。因此,它内部的对象可能不会改变隐藏代码中的顺序。 此ObservableCollection保存自定义样式的按钮对象。这些按钮显示在一个列表框和一个水平布局的StackPanel中,这样按钮就可以很好地排列在一起 问题: 创建的每个按钮都会收到一个日期时间。新添加的按钮的日期总是比之前的按钮的
CollectionViewSource是否有问题,或者是否有更好的方法处理此问题?如果我理解得很好,我会使用DateTime的Ticks属性进行排序,因为它的性质非常准确,而cource是一个简单的数字。如果我理解得很好,我会使用DateTime的Ticks属性进行排序,因为它本质上非常精确,而cource是一个简单的数字。您的ICollectionView是一个实例字段还是一个局部变量,就像您的代码片段一样
它必须是一个实例字段,然后才能进行排序。顺便说一句,我尝试了你的代码片段,并将icollectionview更改为一个字段,它可以工作。你的icollectionview是一个实例字段还是一个局部变量,就像你的代码片段一样
它必须是一个实例字段,然后才能进行排序。顺便说一句,我尝试了你的代码片段,并将icollectionview更改为一个字段,它可以工作。对于grins,你会尝试在XAML中进行排序吗?我知道这些名字不一样,但这是工作代码。我没有按日期排序,但我已经从DocProps中添加和删除了数百个,排序没有中断
<ListBox.DataContext>
<CollectionViewSource Source="{Binding Path=DocProps}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="Date" Direction="Desc" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</ListBox.DataContext>
对于露齿而笑,您是否可以尝试XAML中的排序?我知道这些名字不一样,但这是工作代码。我没有按日期排序,但我已经从DocProps中添加和删除了数百个,排序没有中断
<ListBox.DataContext>
<CollectionViewSource Source="{Binding Path=DocProps}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="Date" Direction="Desc" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</ListBox.DataContext>
如果你关注评论中发布的Siva链接,并从那里关注另一个链接,你最终将到达有人发布解决方案的地方。此解决方案是为DataGrid编写的,但您可以针对您正在使用的任何控件对其进行调整: 格雷格·巴克拉蒂于2011年2月28日上午6:50发布 实现您自己的DataGrid: 强制回调在当前实现中所做的唯一事情是 清除排序描述。您可以简单地通过 覆盖元数据。Silverlight上不可行:重写元数据API 这是不公开的。虽然我不确定Silverlight是否受此影响 缺陷其他风险和副作用可能适用
如果你关注评论中发布的Siva链接,并从那里关注另一个链接,你最终将到达有人发布解决方案的地方。此解决方案是为DataGrid编写的,但您可以针对您正在使用的任何控件对其进行调整: 格雷格·巴克拉蒂于2011年2月28日上午6:50发布 实现您自己的DataGrid: 强制回调在当前实现中所做的唯一事情是 清除排序描述。您可以简单地通过 覆盖元数据。Silverlight上不可行:重写元数据API 这是不公开的。虽然我不确定Silverlight是否受此影响 缺陷其他风险和副作用可能适用
您是否尝试按asc或desc时间顺序排序?如代码示例中所示递减。但它并没有给出稳定的结果。首先,它以正确的顺序添加,然后在3个按钮之后,它开始添加项目。请查看问题:尝试使用插入方法而不是在索引0处添加和添加新项目如何?我无法这样做,因为我的计算取决于我问题中以粗体显示的项目的顺序。是否尝试按asc或desc排序时间顺序?如代码示例所示递减。但它并没有给出稳定的结果。首先,它以正确的顺序添加,然后在3个按钮之后,它开始添加项目,这完全是错误的。看看问题:尝试使用插入方法而不是在索引0处添加并添加新项目如何?我无法这样做,因为我的计算是错误的
请看我问题中以粗体显示的项目的顺序。是否愿意详细说明一下您对索引的含义?我们将研究在xaml中试用它,谢谢。我还试着按标题排序。因为创建的每个按钮都有一个唯一的标题btn1、2、3等。即使在排序时,我也无法获得正确的排序顺序。注意。xaml似乎不起作用,它只是添加到右边,根本没有进行排序。请参阅更新以获得答案。我能说的就是它对我有用。如果排序根本不适用于您,那么我认为您需要将其分解为一个简单的文本列表框进行排序,并开始添加更改,以查看它在哪里中断。我只是不知道。这对我来说是一个相当复杂的页面。就像我说的,把它拆开。我在一个物体上使用它,它正在工作。这不是一个按钮,但不应该打破它。有人打电话给你吗?我想我的是在StringFormat={}{0:s}之前工作的,但是很难看到。使标题成为一个唯一的整数值,但不确定为什么我的日期不能开始排序。顺便问一下,你会把文字放在哪里?谢谢。能不能再详细说明一下你对索引的意思?我们将研究在xaml中试用它,谢谢。我还试着按标题排序。因为创建的每个按钮都有一个唯一的标题btn1、2、3等。即使在排序时,我也无法获得正确的排序顺序。注意。xaml似乎不起作用,它只是添加到右边,根本没有进行排序。请参阅更新以获得答案。我能说的就是它对我有用。如果排序根本不适用于您,那么我认为您需要将其分解为一个简单的文本列表框进行排序,并开始添加更改,以查看它在哪里中断。我只是不知道。这对我来说是一个相当复杂的页面。就像我说的,把它拆开。我在一个物体上使用它,它正在工作。这不是一个按钮,但不应该打破它。有人打电话给你吗?我想我的是在StringFormat={}{0:s}之前工作的,但是很难看到。使标题成为一个唯一的整数值,但不确定为什么我的日期不能开始排序。顺便问一下,你会把文字放在哪里?谢谢。Robert列表框没有CachedItemSource?Robert列表框没有CachedItemSource?
public class SDataGrid : DataGrid
{
static SDataGrid()
{
ItemsControl.ItemsSourceProperty.OverrideMetadata(typeof(SDataGrid), new FrameworkPropertyMetadata((PropertyChangedCallback)null, (CoerceValueCallback)null));
}
}