WPF中的ListBox的用法

传统的ListBox只能将条目以字符串的形式显示,而WPF中的ListBox除了可以显示中规中矩的字符串条目外还能够显示更多的元素,如CheckBox、RadioButton、TextBox等。

<Window x:Class="Chapter5.Page54.ListBox.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel>
        <ListBox Margin="5">
            <CheckBox x:Name="checkBoxTim" Content="Tim"/>
            <CheckBox x:Name="checkBoxTom" Content="Tom"/>
            <CheckBox x:Name="checkBoxBruce" Content="Bruce"/>
            <Button x:Name="buttonMess" Content="Mess" Click="buttonMess_Click" />
            <Button x:Name="buttonOwen" Content="Owen"/>
            <Button x:Name="buttonVictor" Content="Victor" Click="buttonVictor_Click"/>
        </ListBox>
    </StackPanel>
</Window>
        private void buttonVictor_Click(object sender, RoutedEventArgs e)
        {
            Button btn = sender as Button;
            MessageBox.Show(btn.GetType().ToString());
            DependencyObject level1 = VisualTreeHelper.GetParent(btn);
            MessageBox.Show(level1.GetType().ToString());
            DependencyObject level2 = VisualTreeHelper.GetParent(level1);
            MessageBox.Show(level2.GetType().ToString());
            DependencyObject level3 = VisualTreeHelper.GetParent(level2);
            MessageBox.Show(level3.GetType().ToString());
        }

WPF的UI是树形结构,VisualTreeHelper类就是帮助我们在这棵由可视化元素构成的树上进行导航的辅助类。我们沿着被单击的Button一层层的向上找,找到第三层发现它是一个ListBoxItem。ListBoxItem就是ListBox对应的ItemContainer,也就是说,无论你把什么样的数据集合交给ListBox,它都会以这种方式进行自动包装。
大多数情况下,UI上的列表会用于显示动态的后台数据,这时候我们就可以交给ItemsControl的就是程序逻辑中的数据而非控件了。

假设程序中定义有Employee类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Chapter5.Page54.ListBox
{
    public class Employee
    {
        public int Id { set; get; }
        public string Name { set; get; }
        public int Age { set; get; }
    }
}

并且我们在XAML后台里定义一个Employee类的集合:

        List<Employee> empList1 = new List<Employee>()
            {
                new Employee(){Id=1,Name="Tim",Age=30},
                new Employee(){Id=2,Name="T2m",Age=20},
                new Employee(){Id=3,Name="T3m",Age=30},
                new Employee(){Id=4,Name="T4m",Age=40},
            };

在主程序界面上添加一个ListBox控件empList后,在后台代码里给这个ListBox添加数据源等属性:

            this.empList.DisplayMemberPath = "Name";
            this.empList.SelectedValuePath = "Id";
            this.empList.ItemsSource = empList1;

DisplayMemberPath属性告诉ListBox显示每条数据的哪个属性,换句话说,ListBox会去调用这个属性值的ToString()方法,把得到的字符串放入一个TextBlock(最简单的文本控件),然后再按照前面说的办法把TextBlock包装进一个ListBoxItem中。

ListBox的SelectValuePath属性将与其SelectedValue属性配合使用。当调用SelectedValue属性时,ListBox先找到选中的Item所对应的数据对象,然后把SelectedValuePath的值当做数据对象的属性名称并把这个属性值取出来。

        private void buttonMess_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show(this.empList.SelectedValue.ToString());
        }

DisplayMemberPath和SelectedValuePath是两个相当简化的属性。DisplayMemberPath只能显示简单的字符串,想用更加复杂的 形式显示数据需要使用 DataTemplate

SelectValuePath也只能返回单一的值,如果想进行一些复杂的操作,不妨直接使用ListBox的SelectedItem和SelectedItems属性,这两个属性返回的就是数据集合中的对象

        private void buttonMess_Click(object sender, RoutedEventArgs e)
        {
            Employee em = this.empList.SelectedItem as Employee;
            MessageBox.Show(em.Name);
        }

源代码: http://download.csdn.net/detail/eric_k1m/6570437

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值