3

編集#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 { get { if (GlobalObservableCol.regBtns == null) { return new ObservableCollection(); } GlobalObservableCol.regBtns を返します。} }

新規 (機能しなくなりました)、逆は ObserableCol クラスにあります

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

ObservableCollection リストが利用可能な静的クラスで IEnumerable を作成しました。

データバインディングが IEnumerable の場合、バインドできないようです。他のクラスにある NumbersReverse メソッドを MainWindow.xls にバインドする方法は?


カスタム スタイルの WPF ボタンを保持する ObservableCollection があります。

これらの項目は動的に作成され、カスタム スライダー コントロール (リストボックス) に追加されます。たとえば、ボタン 1、ボタン 2、ボタン 3、...

私が欲しいのは正反対です。

たとえば、ボタン 3、ボタン 2、ボタン 1 です。 これはリンクされたリストのように聞こえますが、アプリケーション全体がロジック全体でこの監視可能なコレクションを既に使用しています。

ボタンが UI に表示されたら、最後に追加されたボタンをスライダー (リストボックス コントロール) の最初の項目として配置する必要があります。

これをどのように正確にやってのけることができますか?

ありがとう、PeterP

4

3 に答える 3

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();
于 2012-04-18T11:30:01.207 に答える
2

コードのどこかにmyCollection.Add( someButton ).

と交換してmyCollection.Insert( 0, myButton )終了です。

于 2012-04-18T09:27:59.610 に答える
1

どのフレームワークを使用しているのかわかりません。ビューモデルで次のようにします。

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

}

NumbersReverse をデータソースとして使用します。

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

もちろん、それを行う他の多くの方法があります。あなたのケースで何が最善かを理解する必要があります...

編集:たとえば、他の目的でアイテムの順序を気にしない場合は、 stijn が提供するソリューションの方がはるかに優れています。

于 2012-04-18T09:28:20.320 に答える