2012-06-19 3 views
0

컬렉션에서 인덱스 x [0]과 같은 첫 번째 요소를 얻을 수있는 일부 코드 xaml을 기억합니다.CollectionViewSource의 첫 번째 요소를 가져 오는 방법은 무엇입니까?

이것은 Resources의 CollectionViewSource입니다.

<CollectionViewSource 
      x:Name="groupedItemsViewSource2" 
      Source="{Binding Posters}" 
      ItemsPath="Posters" /> 

목록 상자에 표시하면로드됩니다.

<ListBox ItemsSource="{Binding Source={StaticResource groupedItemsViewSource2}}" /> 

하지만 지금은 xaml을 통해 첫 번째 요소를 얻고 싶습니다. 이것을 할 수 있습니까?

답변

6

나는 유사한 문제에 직면하고, 내가 한 일은 (뷰 모델에서) MoveCurrentToFirst 전화를했다

`SelectedIndex = 0 (XAML에서 목록 상자에) 또 다른 방법했지만 Collection 뷰 소스가 보유하지 않는 경우는 실패했다 모든 데이터. 당신이 확장자를 가진 동일한 작업을 수행 할 수

ICollectionView view = CollectionViewSource.GetDefaultView(observable); 
var enumerator = view.GetEnumerator(); 
enumerator.MoveNext(); // sets it to the first element 
var firstElement = enumerator.Current; 

또는과 관찰 컬렉션 직접 호출 :

public static class Extensions 
{ 
    public static T First<T>(this ObservableCollection<T> observableCollection) 
    { 
     ICollectionView view = CollectionViewSource.GetDefaultView(observableCollection); 
     var enumerator = view.GetEnumerator(); 
     enumerator.MoveNext(); 
     T firstElement = (T)enumerator.Current; 
     return firstElement; 
    } 
} 

0

내가 알고있는 이것을 달성하는 몇 가지 방법이 있습니다. 아마 컬렉션의 첫 번째를 반환하는 별도의 속성으로 이동하거나 컬렉션에있는 첫 번째 요소 또는 바인딩 된 목록을 반환하는 변환기를 만듭니다.

3

내가 지금까지 발견 한 가장 쉬운 방법은 열거를 통해 이동하는 것입니다 다음에 관찰 가능한 컬렉션에서 호출하십시오.

var firstItem = observable.First(); 
+0

컬렉션의 첫 번째 보이는 요소를 가져 오려면 (t 그는 데이터를 기반으로합니다.) 이것은 IMHO로가는 길입니다. 확장 메서드를 사용하더라도 'FirstInView'또는 이와 비슷한 이름을 지정하면 콜렉션 뷰에 액세스하는 것이지 관측 가능한 콜렉트 자체에 액세스하는 것은 아닙니다. – ZoolWay

관련 문제