在WPF网格的单元格中检测2个或更多子节点

时间:2017-09-05 01:50:19

标签: c# wpf grid

假设我有一个 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,具体取决于每个单元格中有多少个子节点。 (这也意味着当孩子移动时,其先前的细胞将失去计数并且其新细胞将获得计数)。这样做的最佳方式是什么?

0 个答案:

没有答案