在带有 mvvm 的 wpf 中,我使用带有 Canvas 作为 ItemsPanelTemplate 和 DataTemplates 的 ListBox 来自定义外观。
我想通过首先将类型 1 的所有项目添加到绘图中,然后将类型 2 的所有项目添加到图形中来提高性能。
我可以创建两个 ListBoxes,它们都使用 Canvas 作为 ItemsPanelTemplate,它们将是叠加层。
平移和滚动可以通过绑定来同步。
这样我就可以相互独立地为两个列表提出 PropertyChanges。
问题:您是否体验过覆盖画布对性能的好处或坏处?
我不确定是否也可以将 CompositeCollection 用于一个 ListBox 的 ItemsSource。或者就此而言,给这两种类型一个共同的子类并保留 ObservableCollection。
问题:您是否认为可以为 Collection 的不同部分以某种方式为具有 CompositeCollection 的列表提供单独的 PropertyChanges?
编辑:
假设我有大量用于画布的点、线、标签,每个都有不同的类型,但是具有共同的基本类型。我使用 DataType: 等选择 DataTemplate DataType="{x:Type my:Point}"
。DataType="{x:Type my:Line}"
首先
,我希望用户尽快看到这些行。我举起PropertyChanged("Lines")
并且线条的 ListBox+Canvas 可见。
在我提出的背景PropertyChanged("Points")
工作者中,点的 ListBox2+Canvas2 是可见的。
当我在另一个后台工作人员中完成时PropertyChanged("Labels")
,标签的 ListBox3+Canvas3 是可见的。