2012-06-19 23 views
0

我記得看過一些代碼xaml,可以從集合中獲取第一個元素(如索引x [0])。如何獲取CollectionViewSource的第一個元素?

這是我的來自Resources的CollectionViewSource。

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

如果我在列表框中顯示它,它會加載它!

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

但現在,我只想通過xaml獲取第一個元素。可以這樣做嗎?

回答

6

我面臨着類似的問題,我所做的就是調用MoveCurrentToFirst(在視圖模型)

`SelectedIndex = 0 (在XAML列表框),另一種方式,但是當集合查看源代碼不持有它失敗任何數據。

0

有一些方法可以完成我所知道的。我可能會使用一個單獨的屬性返回集合中的第一個,或者創建一個Converter,它將返回它綁定到的任何集合或列表中的第一個元素。

3

到目前爲止,我已經找到了最簡單的方法是通過枚舉去:

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; 
    } 
} 

然後從可觀察集合中調用它:

var firstItem = observable.First(); 
+0

要獲取集合的第一個可見元素(不是t他潛在的數據)這是去恕我直言的方式。儘管如果你使用擴展方法,我會把它命名爲'FirstInView'或類似的東西來表明我們正在訪問集合視圖而不是(可觀察)集合本身。 – ZoolWay

相關問題