Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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# 可观测集合的倒序_C#_Wpf_Observablecollection - Fatal编程技术网

C# 可观测集合的倒序

C# 可观测集合的倒序,c#,wpf,observablecollection,C#,Wpf,Observablecollection,我有一个包含自定义对象的ObservableCollection。 通常情况下,项目会添加到列表的末尾 我要找的是: 从列表开始添加的项目。 这可能只显示在UI中,我的整个程序已经在使用此列表中的数据位置。因此,它内部的对象可能不会改变隐藏代码中的顺序。 此ObservableCollection保存自定义样式的按钮对象。这些按钮显示在一个列表框和一个水平布局的StackPanel中,这样按钮就可以很好地排列在一起 问题: 创建的每个按钮都会收到一个日期时间。新添加的按钮的日期总是比之前的按钮的

我有一个包含自定义对象的ObservableCollection。 通常情况下,项目会添加到列表的末尾

我要找的是:

从列表开始添加的项目。 这可能只显示在UI中,我的整个程序已经在使用此列表中的数据位置。因此,它内部的对象可能不会改变隐藏代码中的顺序。 此ObservableCollection保存自定义样式的按钮对象。这些按钮显示在一个列表框和一个水平布局的StackPanel中,这样按钮就可以很好地排列在一起

问题:

创建的每个按钮都会收到一个日期时间。新添加的按钮的日期总是比之前的按钮的日期晚。所有的计算都是在一个时间段内进行的,并且每秒都在运行

所以这次我基本上是在分类,但在3个按钮之后,突然一个按钮被放置在右手边而不是左手边

例如:

Btn3:14:15:45正确Btn4:14:16:00错误Btn2:14:15:32正确Btn1:14:04:17正确

前3个按钮每次都会正确添加到列表的开头。突然,第四项被添加到第二位。似乎并不总是比较时间?每次创建按钮时,都会调用CollectionViewSource方法


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));
    }
}