2012-03-26 7 views
0

私はデータバインドされたTabControlを持っており、各TabItemのインデックスをビューモデルの対応するプロパティにバインドしたいと考えています。 ItemsSourceはObservableCollectionであり、私はBea Stollnitz's Drag/Drop functionalityを使用してタブコントロールの並べ替えを提供しています。TabControl - データバインディングTabItemの順序

私は、タブアイテムヘッダーのデータテンプレートで処理できるはずだが、動作させることができていないと感じています。

答えて

1

あなたのTabControl.ItemsSourceはあなたのコレクションにバインドする必要があります。そのため、タブアイテムの順序を並べ替えるには、単にコレクションを並べ替えるだけです。

私はBeaのドラッグ・ドロップ・コードを使用して、ユーザーがタブ項目をドラッグ・アンド・ドロップすることを可能にするTabControlを作成しました。必要なもののほとんどは、提供しているコードにあります。ドロップすると、ドラッグされたオブジェクトがその親コレクションから削除され、ドロップターゲットコレクションの新しい場所に挿入されます(この場合は同じコレクションです)。

編集

タブインデックスを使用してViewModelの更新について、以下のコメントをもとに、CollectionChangedイベントを使用してみてください。

void MyCollection_CollectionChanged(object sender, CollectionChangedEventArgs e) 
{ 
    foreach (var item in MyCollection) 
     item.TabIndex = MyCollection.IndexOf(item); 
} 
+0

うん、私はそれのその部分が働いていて、それが再注文をタブ正しく、私はちょうど新しいインデックスに移動されたタブのビューモデルを更新するのいずれかの方法がありません。つまり、TabControl.ItemsSourceはObservableCollection です。 MyItemクラスには、TabSequenceプロパティがあります。私がタブを並べ替えるとき、私はTabSequenceプロパティを新しいタブインデックスで更新する必要があります。 –

+0

@ ZFあなたは 'CollectionChanged'イベントにフックし、各項目の' TabSequence'を更新することができます。私は例で私の答えを更新しました。 – Rachel

+0

Perfect、私はCollectionChangedイベントを考慮していませんでした。ありがとうございました! –