C#-ListView的使用

简介: ListView顾名思义用来做列表数据展示,也是我们在开发中经常使用的控件之一,接下来将展示下它的一些使用场景,以满足不同的需求。

ListView顾名思义用来做列表数据展示,也是我们在开发中经常使用的控件之一,接下来将展示下它的一些使用场景,以满足不同的需求。

基本用法

在页面代码中展示数据,如果是一些固定的数据项,可以使用此方法进行数据展示。

<Grid>
    <ListView>
        <ListViewItem>1</ListViewItem>
        <ListViewItem>2</ListViewItem>
        <ListViewItem>3</ListViewItem>
    </ListView>
</Grid>

将数据源绑定到ListView的ItemsSource,在后台构建数据源,并且可以动态改变,即时显示在视图界面。

using Demo.Base;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo.ViewModel
{
    public class ListViewDemoViewModel: NotifyPropertyObject
    {
        ObservableCollection<string> _items= new ObservableCollection<string>();
        public ObservableCollection<string> Items
        {
            get
            {
                return _items;
            }
            set
            {
                _items = value;
                this.RaisePropertyChanged("Items");
            }
        }
        public ListViewDemoViewModel()
        {
            Items.Add("测试1");
            Items.Add("测试2");
            Items.Add("测试3");
            Items.Add("测试4");
        }  
    }
}
<Window x:Class="Demo.View.ListViewDemoView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Demo.View"
        mc:Ignorable="d"
        Title="ListViewDemo" Height="450" Width="800">
    <Grid>
        <ListView ItemsSource="{Binding Items}"></ListView>
    </Grid>
</Window>

展示更加丰富的内容

如果需要展示更加丰富的内容,比如在一个数据项中展示标题,描述,图片等内容,我们需要使用到数据模板DataTemplate。在Listview的ItemTemplate中构建代码,如下:

<ListView.ItemTemplate>
    <DataTemplate>
        <Border BorderBrush="#50E3C2" BorderThickness="1,1,1,1" CornerRadius="1,1,1,1" Margin="10">
            <Grid Margin="5">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition></ColumnDefinition>
                    <ColumnDefinition></ColumnDefinition>
                    <ColumnDefinition></ColumnDefinition>
                </Grid.ColumnDefinitions>
                <Image Width="40" Height="40" Grid.Column="0" Source="{Binding Image}"></Image>
                <Grid Grid.Column="1">
                    <Label Content="{Binding Name}"></Label>
                </Grid>
                <Button Grid.Column="2" Content="{Binding Status}" Command="{Binding DataContext.SignInCommand,RelativeSource={RelativeSource AncestorType=Window}}" CommandParameter="{Binding Path=.}"></Button>
            </Grid>
        </Border>
    </DataTemplate>
</ListView.ItemTemplate>

大概的样式可以如下,我们显示了图标,标题,还有按钮等内容:

网络异常,图片无法展示
|

横向展示

ListView中的显示默认是竖向显示的,若要改成横向显示,我们可以修改ItemsPanel,如下:

<ListView.ItemsPanel>
    <ItemsPanelTemplate>
        <WrapPanel/>
    </ItemsPanelTemplate>
</ListView.ItemsPanel>

若需要能够自动换行,我们设置ScrollViewer.HorizontalScrollBarVisibility="Disabled"即可实现。

展示表格

ListViewGridView结合起来使用,显示表格数据。

using Demo.Base;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo.Model
{
    public  class ListViewModel: NotifyPropertyObject
    {
        private string _name;
        public string Name
        {
            get { return _name; }
            set 
            { 
                _name = value; 
                this.RaisePropertyChanged("Name");
            }
        }
        private int _score;
        public int Score
        {
            get { return _score; }
            set
            {
                _score = value;
                this.RaisePropertyChanged("Score");
            }
        }
    }
}
using Demo.Base;
using Demo.Model;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo.ViewModel
{
    public class ListViewDemoViewModel: NotifyPropertyObject
    {
        ObservableCollection<ListViewModel> _items= new ObservableCollection<ListViewModel>();
        public ObservableCollection<ListViewModel> Items
        {
            get
            {
                return _items;
            }
            set
            {
                _items = value;
                this.RaisePropertyChanged("Items");
            }
        }
        public ListViewDemoViewModel()
        {
            ListViewModel listView1=new ListViewModel();
            listView1.Name = "张三";
            listView1.Score = 90;
            Items.Add(listView1);
            ListViewModel listView2 = new ListViewModel();
            listView2.Name = "李四";
            listView2.Score = 90;
            Items.Add(listView2);
            ListViewModel listView3 = new ListViewModel();
            listView3.Name = "王五";
            listView3.Score = 90;
            Items.Add(listView3);
            ListViewModel listView4 = new ListViewModel();
            listView4.Name = "赵六";
            listView4.Score = 80;
            Items.Add(listView4);
            ListViewModel listView5 = new ListViewModel();
            listView5.Name = "测试";
            listView5.Score = 80;
            Items.Add(listView5);
        }  
    }
}
<ListView.View>
    <GridView>
        <GridViewColumn Header="姓名" Width="120" DisplayMemberBinding="{Binding Name}" />
        <GridViewColumn Header="分数" Width="50" DisplayMemberBinding="{Binding Score}" />
    </GridView>
</ListView.View>

网络异常,图片无法展示
|

分组显示

如果需要分组展示数据,我们需要修改GroupStyle,如下:

<ListView.GroupStyle>
    <GroupStyle>
        <GroupStyle.HeaderTemplate>
            <DataTemplate>
                <TextBlock FontWeight="Bold" FontSize="14" Text="{Binding Name}"/>
            </DataTemplate>
        </GroupStyle.HeaderTemplate>
    </GroupStyle>
</ListView.GroupStyle>
CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(Items);
PropertyGroupDescription groupDescription = new PropertyGroupDescription("Score");
view.GroupDescriptions.Add(groupDescription);

效果如下:

网络异常,图片无法展示
|

目录
相关文章
|
6月前
|
C#
45.c#:listview控件
45.c#:listview控件
44 1
|
C#
C#-ListView
C# ListView
108 0
|
前端开发 C#
【C#/WPF】ListView的MVVM例子,及禁止拖动ListView的头部Header
原文:【C#/WPF】ListView的MVVM例子,及禁止拖动ListView的头部Header 一个ListView的MVVM简单例子: ...
1606 0
如何在 C#中的listView 控件中显示图片?
如何在 C#中的listView 控件中显示图片?
1229 0
如何在 C#中的listView 控件中显示图片?
|
C# 索引 Windows
C#编程-54:ListView控件复习笔记
C#编程-54:ListView控件复习笔记
122 0
|
存储 C#
C#(三十)之C#comboBox ListView treeView
本篇内容记录了comboBox下拉列表框属性、ListView 列表视图属性、ListView 列表视图事件、treeView树状视图属性。
271 0
C#(三十)之C#comboBox ListView treeView
|
C# 索引
C# 获取listview中选中一行的值
C# 获取listview中选中一行的值
843 0