C# 从不完整的集合填充ItemsControl
我需要在WPF中创建一个PDF预览器,并希望在绑定到呈现页面的C# 从不完整的集合填充ItemsControl,c#,wpf,C#,Wpf,我需要在WPF中创建一个PDF预览器,并希望在绑定到呈现页面的observeCollection的ItemsControl中显示页面(每个页面都是BitmapSource实例)。ItemsControl也位于ScrollViewer中。现在,我不想一次呈现所有页面,因为可能有一百个页面,它们会很快消耗掉内存。我只想渲染那些在应用程序窗口中可见的。但是,同时我希望ItemsControl与PDF文档中所有页面的数量一样大,以便ScrollViewer的滚动条足够小,并显示还有多少页面需要滚动 所以
observeCollection
的ItemsControl
中显示页面(每个页面都是BitmapSource
实例)。ItemsControl
也位于ScrollViewer
中。现在,我不想一次呈现所有页面,因为可能有一百个页面,它们会很快消耗掉内存。我只想渲染那些在应用程序窗口中可见的。但是,同时我希望ItemsControl
与PDF文档中所有页面的数量一样大,以便ScrollViewer
的滚动条足够小,并显示还有多少页面需要滚动
所以问题是,如何使ItemsControl
与所有页面的数量一样大,但不使observedcollection
拥有所有页面
我还考虑将
项控件
替换为网格
,并添加一些将高度设置为页面高度的虚拟项,然后在用户可见时将其替换为实际页面,但这似乎需要大量工作。而不是使用可观察集合
(您似乎有)您应该有一个ObservableCollection
,其中页面
是一个具有BitmapSource属性的类,该属性实现了INotifyPropertyChanged
接口,例如
public class Page : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private BitmapSource image;
public BitmapSource Image
{
get { return image; }
set
{
image = value;
PropertyChanged?.Invoke(this,
new PropertyChangedEventArgs(nameof(Image)));
}
}
}
现在,您可以创建尽可能多的页面
实例,就像文档中的页面一样,并将它们放入ObservableCollection。只有当页面实际加载时,您才可以分配其图像
属性,这将触发ItemTemplate中的如下绑定:
<ItemsSource.ItemTemplate>
<DataTemplate>
<Image Source="{Binding Image}"/>
<DataTemplate>
</ItemsSource.ItemTemplate>
您应该拥有一个可观察集合,而不是一个可观察集合
,其中页面
是一个具有BitmapSource属性的类,该属性实现了INotifyPropertyChanged
接口,例如
public class Page : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private BitmapSource image;
public BitmapSource Image
{
get { return image; }
set
{
image = value;
PropertyChanged?.Invoke(this,
new PropertyChangedEventArgs(nameof(Image)));
}
}
}
现在,您可以创建尽可能多的页面
实例,就像文档中的页面一样,并将它们放入ObservableCollection。只有当页面实际加载时,您才可以分配其图像
属性,这将触发ItemTemplate中的如下绑定:
<ItemsSource.ItemTemplate>
<DataTemplate>
<Image Source="{Binding Image}"/>
<DataTemplate>
</ItemsSource.ItemTemplate>
我是否可以在Page类中创建宽度和高度,以确保ItemsControl为每个页面保留足够的屏幕空间(以便ScrollViewer的滚动条具有适当的大小)?您可能会设置图像控件的固定大小。否则,您当然可以将其宽度和高度绑定到页面类的相应属性。因此类似于
?当然可以,为什么不试试呢?我是否可以在页面类中创建宽度和高度,以确保ItemsControl为每个页面保留足够的屏幕空间(以便ScrollViewer的滚动条具有适当的大小)?您可能会设置图像控件的固定大小。否则,您当然可以将其宽度和高度绑定到页面类的适当属性。因此类似于
?当然,为什么不试试呢?