WPF ListView展示层叠信息

简介: 原文:WPF ListView展示层叠信息通常我们在ListView中展示一列同类数据,例如城市名称。不过可以对ListView的DataTemplate稍作修改,让其显示层叠信息。例如:需要在ListView中显示省份和省份对应的城市名称。
原文: WPF ListView展示层叠信息

通常我们在ListView中展示一列同类数据,例如城市名称。不过可以对ListView的DataTemplate稍作修改,让其显示层叠信息。例如:需要在ListView中显示省份和省份对应的城市名称。首先准备基础类,

City类:

    public class City : ViewModeBase
    {
        private string _name;
        public string Name
        {
            get
            {
                return _name;
            }
            set
            {
                if (_name != value)
                {
                    _name = value;
                    OnPropertyChanged("Name");
                }
            }
        }
    }

Province类:

    public class Province : ViewModeBase
    {
        private string _name;
        public string Name
        {
            get
            {
                return _name;
            }
            set
            {
                if (_name != value)
                {
                    _name = value;
                    OnPropertyChanged("Name");
                }
            }
        }

        private ObservableCollection<City> _citys;

        public ObservableCollection<City> Citys
        {
            get
            {
                return _citys;
            }
            set
            {
                if (_citys != value)
                {
                    _citys = value;

                    OnPropertyChanged("Citys");
                }
            }
        }

        public Province()
        {
            _citys = new ObservableCollection<City>();
        }
    }

制作模拟数据:

        ObservableCollection<Province> _provinces = null;

        public MainWindow()
        {
            InitializeComponent();

            Province provinceJs = new Province() { Name = "江苏" };

            provinceJs.Citys.Add(new City() { Name = "南京"});
            provinceJs.Citys.Add(new City() { Name = "苏州" });
            provinceJs.Citys.Add(new City() { Name = "无锡" });
            provinceJs.Citys.Add(new City() { Name = "常州" });
            provinceJs.Citys.Add(new City() { Name = "镇江" });
            provinceJs.Citys.Add(new City() { Name = "泰州" });
            provinceJs.Citys.Add(new City() { Name = "南通" });

            Province provinceZj = new Province() { Name = "浙江" };

            provinceZj.Citys.Add(new City() { Name = "杭州" });
            provinceZj.Citys.Add(new City() { Name = "宁波" });
            provinceZj.Citys.Add(new City() { Name = "温州" });
            provinceZj.Citys.Add(new City() { Name = "嘉兴" });
            provinceZj.Citys.Add(new City() { Name = "湖州" });
            provinceZj.Citys.Add(new City() { Name = "绍兴" });
            provinceZj.Citys.Add(new City() { Name = "金华" });
            provinceZj.Citys.Add(new City() { Name = "衢州" });

            Province provinceSd = new Province() { Name = "山东" };

            provinceSd.Citys.Add(new City() { Name = "济南" });
            provinceSd.Citys.Add(new City() { Name = "潍坊" });
            provinceSd.Citys.Add(new City() { Name = "泰安" });

            _provinces = new ObservableCollection<Province>();

            _provinces.Add(provinceJs);
            _provinces.Add(provinceZj);
            _provinces.Add(provinceSd);

            DataContext = _provinces;
        }

XAML:

    <Window.Resources>
        <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
    </Window.Resources>
    <Grid>
        <ListView ItemsSource="{Binding .}" Width="100" Height="300">
            <ListView.Template>
                <ControlTemplate>
                    <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
                        <ItemsPresenter/>
                    </ScrollViewer>
                </ControlTemplate>
            </ListView.Template>

            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel IsItemsHost="True" 
                                VirtualizingStackPanel.IsVirtualizing="True"
                                VirtualizingStackPanel.VirtualizationMode="Recycling" />
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>

            <ListView.ItemTemplate>
                <DataTemplate DataType="{x:Type local:Province}">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="*"/>
                        </Grid.RowDefinitions>
                        
                        <!--Province-->
                        <Border Grid.Row="0" Background="#e1e2e7">
                            <StackPanel Orientation="Horizontal" Margin="20,8">
                                <TextBlock Text="{Binding Name}" Foreground="#647081" FontSize="14"/>
                                <!--<ToggleButton Content="{Binding Name}" IsChecked="False" x:Name="_toggleButton" FontSize="14" Foreground="#647081"/>-->
                            </StackPanel>
                        </Border>

                        <!--City List-->
                        <!--<ListBox Grid.Row="1" ItemsSource="{Binding Citys}"
                                 Visibility="{Binding ElementName=_toggleButton, Path=IsChecked,Converter={StaticResource BooleanToVisibilityConverter}}">-->
                        <ListView Grid.Row="1" ItemsSource="{Binding Citys}">
                            <ListView.Template>
                                <ControlTemplate>
                                    <Grid>
                                        <ItemsPresenter/>
                                    </Grid>
                                </ControlTemplate>
                            </ListView.Template>

                            <ListView.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <StackPanel IsItemsHost="True"/>
                                </ItemsPanelTemplate>
                            </ListView.ItemsPanel>

                            <ListView.ItemTemplate>
                                <DataTemplate DataType="{x:Type local:City}">
                                    <TextBlock Text="{Binding Name}" Foreground="#647081" FontSize="12"/>
                                </DataTemplate>
                            </ListView.ItemTemplate>
                        </ListView>
                    </Grid>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </Grid>

运行效果:

通过在ListView的DataTemplate中再绑定一个ListView来展示层叠信息。

感谢您的阅读,代码点击这里下载。

目录
相关文章
|
C# Windows
WPF 获取程序路径的一些方法,根据程序路径获取程序集信息
原文:WPF 获取程序路径的一些方法,根据程序路径获取程序集信息 一、WPF 获取程序路径的一些方法方式一 应用程序域 //获取基目录即当前工作目录 string str_1 = System.
1627 0
|
9月前
|
数据处理 C# 索引
WPF技术之ListView控件
WPF ListView控件是一个用来显示集合数据的控件,它以表格形式呈现数据,并支持对数据进行排序、筛选和操作。
246 0
|
9月前
WPF-样式问题-处理ListBox、ListView子项内容全填充问题
WPF-样式问题-处理ListBox、ListView子项内容全填充问题
116 0
|
9月前
WPF-样式问题-ListBox或ListView中子项全填充去除边线问题
WPF-样式问题-ListBox或ListView中子项全填充去除边线问题
73 0
|
12月前
|
Oracle 数据管理 关系型数据库
WPF实验室信息系统源码,LIS源码
检验报告集中管理: 主要包含申请单详细信息、申请检验组合信息、申请单列表数据、以及结构数据等4四功能模块。可在此模块中查看检验结果,进行检验报告预览。
WPF实验室信息系统源码,LIS源码
|
前端开发 C#
【C#/WPF】ListView的MVVM例子,及禁止拖动ListView的头部Header
原文:【C#/WPF】ListView的MVVM例子,及禁止拖动ListView的头部Header 一个ListView的MVVM简单例子: ...
1553 0
|
前端开发 C#
WPF MVVM模式下实现ListView下拉显示更多内容
原文:WPF MVVM模式下实现ListView下拉显示更多内容 在手机App中,如果有一个展示信息的列表,通常会展示很少一部分,当用户滑动到列表底部时,再加载更多内容。这样有两个好处,提高程序性能,减少网络流量。
1514 0
|
C# Windows
WPF ItemsControl ListBox ListView比较
原文:WPF ItemsControl ListBox ListView比较 在进行列表信息展示时,WPF中提供多种列表可供选择。这篇博客将对WPF ItemsControl, ListBox, ListView进行比较。
1095 0
|
大数据 C#
利用WPF的ListView进行大数据量异步加载
原文:利用WPF的ListView进行大数据量异步加载      由于之前利用Winform的ListView进行大数据量加载的时候,诟病良多,所以今天试着用WPF的ListView来做了一下,结果没有让我失望,我将一个拥有43000行,510列的csv文件导入到了ListView中,总共耗时在10s左右,并且在导入的过程中,软件界面上的提示信息一直在提示当前导入了多少条。
1675 0
|
C#
WPF 获取 ListView DataTemplate 中控件值
原文:WPF 获取 ListView DataTemplate 中控件值 版权声明:本文为博主原创文章,未经博主允许可以随意转载 https://blog.csdn.
1642 0