5.3.3 ItemsControl
先来说明一下代码:在listBox里面放了几个checkbox和button,说明ListBoxI的Item不仅支持类型相同的元素,还支持类型不同的元素。这是因为,Listbox的每一项都是经过“ListBoxItem”加工厂处理的,最终放入当做自己的内容--放入自己的容器内。这里通过后台代码说明了每一个条目都被ListboxItem包装过了,完全没有必要每一个条目都在xmal文件按照如下写法:
<ListBoxItem>
<Button x:Name="btn3" Content="按钮1"/>
</ListBoxItem>
在实际项目中,很少像上面那样把代码写死,可以动态的绑定ListBox。把数据源赋给ListBox的ItemsSource,通过DisplayMemberPath属性来显示string类型的数据源里面的字段条目(如果想显示复杂的数据的话,要使用DataTemplate,具体在模板再记录,在此知道有这么一回事就好了);通过SelectedItem和SelectionChanged来观察选中的项。下面的例子实现在listbox上绑定指定数据,然后弹出选中人的年龄。直接给出代码:
xaml
<Window x:Class="WPF测试demo.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<StackPanel Background="LightBlue">
<TextBox Margin="5"></TextBox>
<TextBox Margin="5"></TextBox>
<TextBox Margin="5"></TextBox>
<Button Content="OK" Margin="5"></Button>
<ListBox x:Name="listBoxEmplyee" Height="100"/>
</StackPanel>
</Window>
cs
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
InitData();
}
private void InitData()
{
List<Emplyee> emplist = new List<Emplyee>()
{
new Emplyee(){Age = 30,Name = "唐三三",Id = 1} ,
new Emplyee(){Age = 50,Name = "刘德华",Id = 2} ,
new Emplyee(){Age = 40,Name = "赵云",Id = 3}
};
this.listBoxEmplyee.DisplayMemberPath = "Name"; //显示的字段
this.listBoxEmplyee.SelectedValuePath = "Id";
this.listBoxEmplyee.ItemsSource = emplist;
}
}
public class Emplyee
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}

网友评论