假设我有一个 WPF 网格,它的所有子项都属于同一个类,正确实现了INotifyPropertyChanged
public class MyObject: INotifyPropertyChanged
{
public int Row {get;set;}
public int Column {get; set}
public int IsOverlap {get; set}
etc.....
}
在我的实际项目中,我有一个 ListView ,其ItemsPanel是一个网格(显示上面的MyObject类型):
<ItemsPanelTemplate x:Key="GridPanelItemsTemplate">
<Grid IsItemsHost="True" Loaded="Grid_Loaded" />
</ItemsPanelTemplate>
这是ItemsSource(来自多个集合):
<CompositeCollection x:Key="CombinedCollection">
<CollectionContainer Collection="{Binding Source={StaticResource MyCollection1}}" />
<CollectionContainer Collection="{Binding Source={StaticResource MyCollection2}}" />
<CollectionContainer Collection="{Binding Source={StaticResource MyCollection3}}" />
<CollectionContainer Collection="{Binding Source={StaticResource MyCollection4}}" />
<CollectionContainer Collection="{Binding Source={StaticResource MyCollection5}}" />
</CompositeCollection>
...其中MyCollection1到5是一种
ObservableCollection<MyObject>
这是ListView:
<ListView ItemsPanel="{StaticResource GridPanelItemsTemplate}"
ItemsSource="{StaticResource CombinedCollection}" />
当ListView加载并且特定单元格中有多个子项时,该单元格中的所有子项都应具有IsOverlap = True。在程序中,用户可以同时将多个子节点移动到其他单元格,如果是这样,系统应该再次检查并将IsOverlap设置为true或false,具体取决于每个单元格中有多少个子节点。 (这也意味着当孩子移动时,其先前的细胞将失去计数并且其新细胞将获得计数)。这样做的最佳方式是什么?