更改显示(UI)/项目顺序Observable Collection

时间:2012-04-18 09:18:38

标签: c# .net wpf

编辑#2:

    public void ReverseOrderRegBtns()
    {
        ICollectionView view = CollectionViewSource.GetDefaultView(GlobalObservableCol.regBtns);
        view.SortDescriptions.Add(new SortDescription("ReverseOrder", ListSortDirection.Ascending));
        view.Refresh();
    }

不确定如何适应ICollectionView,它还会中断正在执行某些逻辑的计时器。出于某种原因,它会中断我创建按钮时开始计数的时间。

我的应用程序有多个计时器,因此创建的按钮每隔x秒就可以获得可能的新内容更新。

编辑:

数据绑定如下所示:

<ListBox x:Name="lbRegistration" ItemsSource="{Binding regBtnsReverse, ElementName=Window}" Background="{x:Null}" 

旧:      public ObservableCollection RegBtns             {                 得到                 {                     if(GlobalObservableCol.regBtns == null)                     {                         return new ObservableCollection();                     }                     返回GlobalObservableCol.regBtns;                 }             }

新的(不再有效),反之在ObserableCol类

public IEnumerable<RegistrationButton> RegBtns
        {
            get
            {
                return GlobalObservableCol.regBtnsReverse;
            }
        }

我在一个静态类中创建了IEnumerable,其中ObservableCollection列表可用。

当我的数据绑定是IENumerable时,我似乎无法绑定。如何绑定NumbersReverse  位于我的MainWindow.xls的其他类中的方法?


我有一个ObservableCollection,它包含自定义样式的WPF按钮。

这些项目会动态创建并添加到自定义滑块控件(列表框)中。 例如按钮1,按钮2,按钮3,......

我想要的只是相反

例如按钮3,按钮2,按钮1。 这听起来像一个链表,但我的整个应用程序已经在整个逻辑中使用了这个Observable Collection。

当按钮显示在UI中时,最后添加的按钮应该作为我滑块上的第一个项目(即列表框控件)。

我怎么能把它拉下来?

谢谢, PeterP

3 个答案:

答案 0 :(得分:3)

<ListBox ItemsSource="{Binding Foo}"/>

private ObservableCollection<RegButtton> RegBtns = new...;

public ICollectionView Foo { get; set; }

Foo = CollectionViewSource.GetDefaultView(RegBtns);
Foo.SortDescriptions.Add(new SortDescription("SomePropertyName", ListSortDirection.Ascending));
Foo.Refresh();

答案 1 :(得分:2)

代码中的某处应该有myCollection.Add( someButton )

将其替换为myCollection.Insert( 0, myButton ),您就完成了。

答案 2 :(得分:1)

我不知道你使用什么框架。我会在我的视图模型中做一些事情:

public ObservableCollection<int> Numbers { get; private set; }
public IEnumerable<int> NumbersReverse
{
    get
    {
        return Numbers.Reverse();
    }

}

我会使用NumbersReverse作为数据源:

<ListBox Name="listBox1" ItemsSource="{Binding NumbersReverse}"/>

当然还有很多其他方法可以做到这一点。你必须弄清楚你的情况最好...

编辑: 例如如果你不关心任何其他目的的物品的顺序,那么stijn提供的解决方案要好得多。