我有一个列表,它绑定到一个可观察的自定义类集合。工作完美。
我想做什么我们在最后一行中添加一行,当它进入视图时它不应该是可观察集合的一部分它应该触发一个函数来将更多项目加载到列表框中。
由于 Erphan Rajput
答案 0 :(得分:0)
ListBox默认模板如下所示:
<Border ...>
<ScrollViewer x:Name="ScrollViewer" ...>
<ItemsPresenter />
</ScrollViewer>
</Border>
ItemsPresenter
是从ItemsSource
呈现元素的那个。
如何将默认模板覆盖为:
<Border ...>
<ScrollViewer x:Name="ScrollViewer" ...>
<StackPanel>
<ItemsPresenter ... />
<!-- Your Control Here -->
</StackPanel>
</ScrollViewer>
</Border>
答案 1 :(得分:0)
我已经找到了一种方法,请考虑目前Silverlight控件的限制,这是否是正确的方法。
在XAML中:
<ListBox x:Name="MyListBox" ItemsSource="{Binding MyObservableCollection}"
ItemTemplate="{StaticResource ItemDisplayTemplate}"
ManipulationCompleted="MyListBox_ManipulationCompleted"/>
CS中的:
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
我会尽快发布完整的示例源代码...现在请建议这种方法是否正常。