2012-03-26 2 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

완벽하게, 나는 심지어 CollectionChanged 이벤트를 고려하지 않았다. 고맙습니다! –