listBox怎样实现数据绑定

转载 2012年03月24日 14:28:45
一个数据绑定可以通过 Binding 对象来描述,其中包含数据源,要绑定的属性路径(Path),目标,目标属性等。

  其中目标属性必须是依赖属性(DependencyProperty)。

  为了说明方便,首先定义一个数据类:

public class Person
{
public int Age { getset; }
public string Name { getset; }
}

  例子1:

<ListBox x:Name="list1">

</ListBox>

public partial class Page : UserControl
{
public Page()
{
InitializeComponent();

var persons = new List<Person>();
for(var i=0; i< 5; i++)
{
persons.Add(new Person {Name = "Person " + i.ToString(), Age = 20 + i});
}
list1.DataContext = persons;
}
}

  这里仅指定了 list1 的 DataContext 属性,运行后发现页面没有显示。

  如果在页面里改一改:

<ListBox x:Name="list1" ItemsSource="{Binding}">

</ListBox>

  会发现绑定成功。但是数据项显示为默认的 Person 对象 ToString() 后的表示,不太友好。如下图:

  

listbox1

  或者,也可以将后台代码改成:

list1.ItemsSource = persons;

  而页面 markup 仍然是:

<ListBox x:Name="list1">

</ListBox>

  这样也能绑定成功。

  这里的原因在于:ListBox 通过 ItemsSource 里的数据去填充数据项,所以直接给这个属性赋值是可以的。

  或者,通过空绑定语法 {Binding},指定 ItemsSource 属性绑定为数据源的对象本身(未指定绑定路径)。而数据源就是通过 DataContext 获得的,并且这个属性的数据可以从父对象继承下来。

  下面给 ListBox 指定列表项的数据模板,让它显示的好看一点:

<ListBox x:Name="list1">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Age}" Margin="20,0" />
<TextBlock Text="{Binding Name}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

  显示如下:

  

listbox2

  还可以将 DataTemplate 定义到 App 的 Resource 里去,以便于重用。

  App.xaml:

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x=
"http://schemas.microsoft.com/winfx/2006/xaml" 
x:Class=
"SilverlightTestApp.App"
>
<Application.Resources>
<DataTemplate x:Key="ListBoxDataTemplate">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Age}" Margin="20,0" />
<TextBlock Text="{Binding Name}" />
</StackPanel>
</DataTemplate>
</Application.Resources>
</Application>

  Page.xaml:

<UserControl x:Class="SilverlightTestApp.Page"
xmlns=
"http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x=
"http://schemas.microsoft.com/winfx/2006/xaml" 
Width=
"400" Height="300">
<Grid x:Name="LayoutRoot" Background="White">
<ListBox x:Name="list1" ItemTemplate="{StaticResource ListBoxDataTemplate}">
</ListBox>
</Grid
</UserControl>

运行后效果一样。

ListBox控件的数据绑定

怎样将数据库里的数据显示在ListBox控件上? 在aspx文件中只需写: 在aspx.cs文件中将数据绑定到ListBox,代码如下: string connStr = "Data Source...
  • summerviva
  • summerviva
  • 2013年12月28日 18:58
  • 1567

ListBox绑定数据源

string sql = "select * from repair where userid = " + userid; DataTable dt = DBUtil.getD...
  • QingHeShiJiYuan
  • QingHeShiJiYuan
  • 2015年09月23日 08:07
  • 1277

WinForm中ListBox数据绑定问题

WinForm中ListBox数据绑定问题      这两天遇到ListBox数据绑定并显示的问题,以前以为可以根ASP.NET中的用法差不多,即 ListBox listBox;     ...
  • u010712693
  • u010712693
  • 2014年05月15日 09:12
  • 964

ListBox绑定的研究

本文主要研究ListBox的绑定,一般来说,ListBox常用的绑定属性是ItemsSource和SelectedItem,但是本文讨论的是其他两个属性:SelectedValue, Selected...
  • puncha
  • puncha
  • 2012年04月08日 00:41
  • 1779

WPF中关于ListBox绑定数据的问题

在定义ListBox的ItemSource绑定时,出现了初次绑定有数据,但是数据变化时视图没有更新的情况。...
  • loveyou388i
  • loveyou388i
  • 2017年05月03日 09:19
  • 810

WPF ListBox数据绑定

使用数据库AllData ,我们的程序会从S_Province表中读取数据,并绑定! 表结构如图所示: 程序将读取城市名称,创建时间,修改时间,列在一个WPF ListBox控件...
  • lemonay
  • lemonay
  • 2013年03月20日 13:03
  • 1372

C# WPF在xaml中的数据绑定

在WPF的绑定中个人分为两种:非集合数据绑定和集合数据绑定。 非集合数据绑定:指的是数据为单个,而不是有很多子项,例如Button,TextBox,TextBlock等等的绑定。 集合数据绑定:指的是...
  • hhhhhjkk
  • hhhhhjkk
  • 2017年10月18日 21:28
  • 44

WPF学习笔记——ListBox用ItemsSource绑定数据源

protected class UserItem { public UserItem(int Id, string Name, bool IsActived) ...
  • leftfist
  • leftfist
  • 2014年05月10日 13:37
  • 28407

winform里listbox数据绑定,listbox取值问题

winform里listbox数据绑定,listbox取值问题
  • ningxi_
  • ningxi_
  • 2010年10月02日 12:23
  • 7923

WPF中ListBox的创建和多种绑定用法

本篇博文为翻译(http://www.c-sharpcorner.com/uploadfile/mahesh/listbox-in-wpf/),本篇博文主要介绍ListBox控件的创建和用法。 先从...
  • lanshengsheng2012
  • lanshengsheng2012
  • 2013年08月28日 16:51
  • 15524
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:listBox怎样实现数据绑定
举报原因:
原因补充:

(最多只允许输入30个字)