2011-01-27 101 views
1

我有一個列表綁定到一個可觀察的自定義類的集合。完美的作品。Silverlight列表框綁定問題

我想做什麼我們最後添加一行不是可觀察集合的一部分,只要它出現在視圖中它應該觸發一個函數將更多的項加載到列表框中。

感謝 Erphan拉傑普特

+2

爲什麼你想要這樣做?創建要添加到集合的項目是否昂貴?你在使用標準的ListBox控件嗎? – AnthonyWJones 2011-01-27 22:41:09

+0

這是可能的,但不是列表框中的最後一行。它將看起來是一個分離的控制。 – vorrtex 2011-01-27 23:44:48

+0

您是否試圖將數據逐步加載到集合中? – WiredPrairie 2011-01-28 13:42:04

回答

0

列表框默認模板看起來是這樣的:

<Border ...> 
    <ScrollViewer x:Name="ScrollViewer" ...> 
    <ItemsPresenter /> 
    </ScrollViewer> 
</Border> 

ItemsPresenter是呈現從ItemsSource的元素之一。

那你覆蓋默認的模板是這樣的:

<Border ...> 
    <ScrollViewer x:Name="ScrollViewer" ...> 
    <StackPanel> 
     <ItemsPresenter ... /> 
     <!-- Your Control Here --> 
    </StackPanel> 
    </ScrollViewer> 
</Border> 
0

我已經想出了一個辦法做到這一點請建議,如果這是考慮從Silverlight控件的當前限制是正確的做法。

在CS
<ListBox x:Name="MyListBox" ItemsSource="{Binding MyObservableCollection}" 
    ItemTemplate="{StaticResource ItemDisplayTemplate}" 
    ManipulationCompleted="MyListBox_ManipulationCompleted"/> 

在XAML

private void MyListBox_ManipulationCompleted(object sender, 
     System.Windows.Input.ManipulationCompletedEventArgs e) 
{ 
    ScrollViewer sv = Utility.FindScrollViewerRecursive((ListBox)sender); 
    int a = Int32.Parse(Math.Round(sv.VerticalOffset).ToString()) + 
     Int32.Parse(Math.Round(sv.ViewportHeight).ToString()); 
    if ((a + 1) >= sv.ExtentHeight) 
    { 
     Debug.WriteLine("Should start loading new items in background"); 
    } 
    Debug.WriteLine(sv.VerticalOffset + " - " + sv.ViewportHeight + " - " + sv.ExtentHeight); 
} 

我從這裏採取的FindScrollViewerRecursive http://blogs.msdn.com/b/rohantha/archive/2010/09/12/silverlight-wp7-list-scroll-with-items-as-image-description-from-web-bing-image-search.aspx

我會盡快發佈完整的示例源代碼供現在請建議,如果這種方法是確定的。