ListView

书名:WPF专业编程指南
作者:李应保
出版社:电子工业出版社
出版时间:2010-01
ISBN:9787121100116


一、ListView

  • ListView也是一个老的控件,它和ListBox非常类似,所以它是ListBox的派生类。ListView和ListBox不同的地方在于,ListView有多列,而且每列都有头。ListView默认的SelectionMode为Extended。

二、

  • 在XAML中创建ListView头非常简单,下面的几行代码就创建了一个ListView的头:
    <ListView>
      <ListView.View>
        <GridView>
          <GridViewColumn  Width ="100" Header ="姓名"/>
          <GridViewColumn  Width ="100" Header ="工作年限"/>
          <GridViewColumn  Width ="100" Header ="办公电话"/>
          <GridViewColumn  Width ="100" Header ="电邮"/>
        </GridView>
      </ListView.View>
    </ListView>
  • 若在上面的ListView里放入数据,通常ListView用于建立数据表。如直接和ADO的DataSet中的Table相连,或与XML数据进行绑定。
    在C#中创建一个PersonaInfoList:
  using System;
  using System.Collections.Generic;
  using System.Text;
  using System.Windows;
  using System.Windows.Controls;
  using System.Windows.Data;
  using System.Windows.Documents;
  using System.Windows.Input;
  using System.Windows.Media;
  using System.Windows.Media.Imaging;
  using System.Windows.Shapes;
  using System.Collections.ObjectModel;
  namespace Yingbao.Chapter6
  {
    public partial class UseListView : System.Windows.Window
    {
        private ObservableCollection<PersonalInfo> personalInfoList
          = new ObservableCollection<PersonalInfo>();
        public ObservableCollection<PersonalInfo> PersonalInfoList
        {
            get { return this.personalInfoList; }
        }
        public UseListView()
        {
            personalInfoList.Add(new PersonalInfo("程俊", 8,
                "4338819", "chenJun@hotmail.com"));
            personalInfoList. Add(new PersonalInfo("张珊", 12,
                "6566665", "zhangshang@hotmail.com"));
            personalInfoList. Add(new PersonalInfo("陶铸", 7,
                "65765675", "taozhu@hotmail.com"));
            personalInfoList.Add(new PersonalInfo("李伟光", 25,
                "342354325", "liweiguang@hotmail.com"));
            personalInfoList.Add(new PersonalInfo("刘表", 3,
              "2342343", "liubiao@hotmail.com"));
            InitializeComponent();
        }
        private void AddRow_Click(object sender,
                RoutedEventArgs rea)
        {
        personalInfoList.Add(new PersonalInfo("林晓霜", 1,
        "34523654", "xiaoshuanglin@hotmail.com"));
        }
    }
    public class PersonalInfo
    {
      private string name;
      public string Name
      {
            get{  return this.name;}
            set{ this.name = value;}
      }
      private int workYears;
      public int WorkYears
      {
            get{ return this.workYears;}
            set {this.workYears = value;}
      }
        private string workPhoneNumber;
        public string WorkPhoneNumber
        {
            get{ return this.workPhoneNumber; }
            set{ this.workPhoneNumber = value;}
        }
        private string email;
        public string Email
        {
            get{ return this.email;}
            set{ this.email = value;}
        }
        public PersonalInfo(string name, int year,
              string phoneno, string email)
        {
            this.name = name;
            this.workYears = year;
            this.workPhoneNumber = phoneno;
            this.email = email;
        }
    }
  }
  • PersonalInfoList是一个ObservableCollection<T>,这个类是.NET 2.0引入的,它是一个模板类,其特点是它允许有一个观察者。当把数据绑定到ListView上时,ListView就是PersonalInfoList的观察者。当PersonalInfoList中的数据发生变化时,ListView会自动反映这种变化。
    PersonalInfoList里面存放的是PersonalInfo对象,这个类很简单,它存有姓名、工作年限、办公电话、电邮等信息。

  • XAML程序:

  <Window x:Class="Yingbao.Chapter6.UseListView"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml
  Title="Yingbao.Chapter6" Height="300" Width="500"
  DataContext="{Binding RelativeSource={RelativeSource Self}}">
  <StackPanel>
    <ListView ItemsSource="{Binding PersonalInfoList}" >
        <ListView.View>
        <GridView>
          <GridViewColumn  Width ="100" Header ="姓名"
            DisplayMemberBinding="{Binding Path=Name }"  />
          <GridViewColumn  Width ="100" Header ="工作年限"
            DisplayMemberBinding="{Binding Path=WorkYears }"/>
          <GridViewColumn  Width ="100" Header ="办公电话"
            DisplayMemberBinding="{Binding Path=WorkPhoneNumber}"/>
          <GridViewColumn  Width ="100" Header ="电邮"
            DisplayMemberBinding="{Binding Path=Email}"/>
        </GridView>
      </ListView.View>
    </ListView>
    <Button HorizontalAlignment="Right" Margin="5,5,5,5"
      Content="Add Row" Click="AddRow_Click" />
  </StackPanel>
  </Window>
  • 图6-21是这个程序的运行结果。由于在上面的程序中,使用的是StackPanel排版,所以在按“增加记录”按钮时,“增加记录”按键自己往下移动。解决这一问题的方法是用Grid或Canvas来代替StackPanel,
    GridView支持拖放功能,可以使用拖放功能任意改变ListView中列的位置。但遗憾的是,GridView并不支持排序功能。若要对记录进行排序,需要做进一步工作。


    图6-21 ListView示例
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容