在我目前维护的WinForms应用程序中,我有一个树控件,其中有数千个节点。每个节点都是使用自定义的动态生成的图标绘制的(每个图标都是唯一的)。我正在考虑将此应用程序转换为WPF,但我不知道如何正确处理此树视图。我知道在WPF中执行此操作的标准方法是为每个项目使用模板,并为我的图标内容提供图像控件,但如果我绑定数千个动态创建的图像,我会担心性能。使用OwnerDraw,我不必存储图标,只有当节点实际可见时,我才能生成并绘制它。
在WPF中是否有处理此方案的标准方法?
可以看到当前应用程序的屏幕截图here,让您了解我正在处理的内容。
答案 0 :(得分:1)
正确的树实现将始终虚拟化其项目,这意味着只有当前显示的项目将绑定到数据并进行渲染。了解这一点,只需在需要时动态生成图像。
查看侧面,项目模板:
<DataTemplate>
<Image Source="{Binding Image}" />
<DataTemplate>
模特方:
private ImageSource _image;
public ImageSource Image {
get { return _image ?? (_image = CreateImage()); }
}
private ImageSource CreateImage() {
// load your image dynamically here
// If you're creating it from scratch, WriteableBitmap might help you
}
此代码将图像缓存到_image
字段中。如果您不需要它,您可以在每次访问Image
时重新创建它(注意不要经常访问该属性)。