• ListBox Grouping的研究(三):Grouping 级联


    延续上文,我又对代码略作了改动:

    (1)改写了Data类,增加了Level1、Level2两个属性,可以让数据先根据Level1 Grouping,然后在根据Level2 Grouping。

    (2)对GroupItem 的 ControlTemplate 增加了Marging和Padding,好让UI看上去有层次感。除此之外,我没有做任何改动!

    数据结构:

        class Data
        {
            public string Level1 { get; set; }
            public string Level2 { get; set; }
            public string Value { get { return String.Format("Level {0}-{1}", Level1, Level2); } }
        }


    XAML:

    <Window x:Class="WpfApplication2.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:WpfApplication2"    
            Title="MainWindow" SizeToContent="WidthAndHeight">
    
      <Window.Resources>
    
        <DataTemplate DataType="{x:Type local:Data}">
          <TextBlock Text="{Binding Value}"/>
        </DataTemplate>
    
      </Window.Resources>
    
      <StackPanel Margin="5">
        <ListBox ItemsSource="{StaticResource data}">
          <ListBox.GroupStyle>
            <GroupStyle>
              <GroupStyle.ContainerStyle>
                <Style TargetType="GroupItem">
                  <Setter Property="Template">
                    <Setter.Value>
                      <ControlTemplate>
                        <Expander Header="{Binding Name}" Padding="3">
                          <ItemsPresenter Margin="5,0,0,0" />
                        </Expander>
                      </ControlTemplate>
                    </Setter.Value>
                  </Setter>
                </Style>
              </GroupStyle.ContainerStyle>
            </GroupStyle>
          </ListBox.GroupStyle>
        </ListBox>
      </StackPanel>
    </Window>
    


    代码:

        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                ObservableCollection<Data> data = new ObservableCollection<Data>();
    
                data.Add(new Data() { Level1 = "1-1", Level2 = "1" });
                data.Add(new Data() { Level1 = "1-1", Level2 = "1" });
                data.Add(new Data() { Level1 = "1-1", Level2 = "2" });
                data.Add(new Data() { Level1 = "1-1", Level2 = "2" });
                data.Add(new Data() { Level1 = "1-2", Level2 = "1" });
                data.Add(new Data() { Level1 = "1-2", Level2 = "1" });
                data.Add(new Data() { Level1 = "1-2", Level2 = "2" });
                data.Add(new Data() { Level1 = "1-2", Level2 = "2" });
    
                this.Resources.Add("data", data);
                InitializeComponent();
                ICollectionView vw = CollectionViewSource.GetDefaultView(data);
                vw.GroupDescriptions.Add(new PropertyGroupDescription("Level1"));
                vw.GroupDescriptions.Add(new PropertyGroupDescription("Level2"));
            }
        }
    
        class ControlStyleSelector : StyleSelector
        {
            public override Style SelectStyle(object item, DependencyObject container)
            {
                return base.SelectStyle(item, container);
            }
        }
    



    运行截图:

         


    可以看到,级联Grouping是很容易实现的,假如你要对不同的Grouping设置不同的Style也是可以的,你可以在ContainerStyleSelector增加代码逻辑,为不同的Grouping返回不同的Style。



  • 相关阅读:
    Maven:mvn 命令的基本使用
    Java:SPI机制
    Bootstrap3 排版-内联文本元素
    Bootstrap3 排版-页面主体
    Bootstrap3 排版-标题
    Bootstrap3 栅格系统-Less mixin 和变量
    Bootstrap3 栅格系统-列排序
    Bootstrap3 栅格系统-嵌套列
    Bootstrap3 栅格系统-列偏移
    Bootstrap3 栅格系统-实例:响应列重置(Responsive column resets)
  • 原文地址:https://www.cnblogs.com/puncha/p/3876994.html
Copyright © 2020-2023  润新知