Silverlight数据绑定:怎样实现数据绑定

时间:2023-02-09 03:47:49 作者:跷脚大侠 综合材料 收藏本文 下载本文

【导语】“跷脚大侠”通过精心收集,向本站投稿了7篇Silverlight数据绑定:怎样实现数据绑定,今天小编就给大家整理后的Silverlight数据绑定:怎样实现数据绑定,希望对大家的工作和学习有所帮助,欢迎阅读!

篇1:Silverlight数据绑定:怎样实现数据绑定

一个数据绑定可以通过 Binding 对象来描述,其中包含数据源,要绑定的属性路径(Path),目标,目 标属性等,

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

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

public class Person

{

public int Age { get; set; }

public string Name { get; set; }

}

例子1:

public partial class Page : UserControl

{

public Page

{

InitializeComponent();

var persons = new List

();

for(var i=0; i< 5; i++)

{

persons.Add(new Person {Name = “Person ” + i.ToString(), Age = 20 + i});

}

list1.DataContext = persons;

}

}

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

如果在页面里改一改:

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

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

list1.ItemsSource = persons;

而页面 markup 仍然是:

这样也能绑定成功。

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

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

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

显示如下:

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

App.xaml:

xmlns:x=“schemas.microsoft.com/winfx/2006/xaml”

x:Class=“SilverlightTestApp.App”

>

Page.xaml:

xmlns=“schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=“schemas.microsoft.com/winfx/2006/xaml”

Width=“400” Height=“300”>

运行后效果一样。

篇2:学Silverlight 2系列(11):数据绑定

本文为系列文章第十一篇,主要介绍Silverlight 2中的数据绑定,

数据绑定模式

在Silverlight 2中,支持三种模式的数据绑定。

1.OneTime:一次绑定,在绑定创建时使用源数据更新目标,适用于只显示数 据而不进行数据的更新。

2.OneWay:单向绑定,在绑定创建时或者源数据发生变化时更新到目标,适 用于显示变化的数据。

3.TwoWay:双向绑定,在任何时候都可以同时更新源数据和目标。

Jesse Liberty举的例子非常的形象,使用Silverlight开发一个在线书店, 显示书籍的书名、作者等信息,使用OneTime模式,这些数据一般不会发生变化 的;显示价格信息时使用OneWay模式,因为管理员可能会在一天内调整价格;显 示书籍的剩余数量时用TwoWay模式,数量随着用户的订购会随时发生变化,即目 标和源数据都要进行更新。

简单数据绑定

在本示例中我们将做一个简单的数据绑定,用来显示用户信息,XAML如下:

HorizontalAlignment=“Left” Grid.Row=“0” Grid.Column=“1”/>

Grid.Row=“1” Grid.Column=“0” HorizontalAlignment=“Right”/>

Grid.Row=“1” Grid.Column=“1” HorizontalAlignment=“Left”/>

Grid.Row=“2” Grid.Column=“0” HorizontalAlignment=“Right”/>

Grid.Row=“2” Grid.Column=“1” HorizontalAlignment=“Left”/>

添加一个简单User类,它具有Name和Address两个属性:

public class User

{

public string Name { get; set; }

public string Address { get; set; }

}

使用绑定句法{Binding Property}进行数据绑定,注意下面的两个TextBlock 控件Text属性:

HorizontalAlignment=“Left” Grid.Row=“0” Grid.Column=“1”/>

Grid.Row=“1” Grid.Column=“0” HorizontalAlignment=“Right”/>

Grid.Row=“1” Grid.Column=“1” HorizontalAlignment=“Left”

Text=“{Binding Name}”/>

Grid.Row=“2” Grid.Column=“0” HorizontalAlignment=“Right”/>

Grid.Row=“2” Grid.Column=“1” HorizontalAlignment=“Left”

Text=“{Binding Address}”/>

指定数据源,注意这里是创建一个User的实例并赋值后,把user实例绑定到 了TextBlock的DataContext上,而不是向之前我们所做的示例中那样,直接指定 Text属性:

private void UserControl_Loaded(object sender, RoutedEventArgs e)

{

User user = new User();

user.Name = “TerryLee”;

user.Address = “中国 天津”;

lblName.DataContext = user;

lblAddress.DataContext = user;

}

运行示例后,可以看到:

上面这种数据绑定模式,只是显示数据而不对数据做任何修改,默认的绑定 模式是一次绑定OneTime。

单向绑定示例

如果需要在数据源发生变化时能够通知UI进行相应的更新,即使用单向绑定 OneWay或者双向绑定TwoWay,则业务实体需要实现接口INotifyPropertyChanged 。在本示例中,我们加上一个更新按钮,当单击按钮时更新user实例的属性值, 会看到界面上的数据也会发生变化。

修改一下User类,使其实现INotifyPropertyChanged接口。

public class User : INotifyPropertyChanged

{

public event PropertyChangedEventHandler PropertyChanged;

private string _name;

public string Name

{

get { return _name; }

set

{

_name = value;

if(PropertyChanged != null)

{

PropertyChanged(this, new PropertyChangedEventArgs (“Name”));

}

}

}

private string _address;

public string Address

{

get { return _address; }

set

{

_address = value;

if (PropertyChanged != null)

{

PropertyChanged(this, new PropertyChangedEventArgs(“Address”));

}

}

}

}

修改数据绑定模式,使用单向绑定OneWay模式,如{Binding Address, Mode=OneWay}

HorizontalAlignment=“Left” Grid.Row=“0” Grid.Column=“1”/>

编写事件处理程序,为了演示把user声明为一个全局的,并在按钮的单击事 件中修改其属性值:

public partial class Page : UserControl

{

public Page()

{

InitializeComponent();

}

User user;

private void UserControl_Loaded(object sender, RoutedEventArgs e)

{

user = new User();

user.Name = “TerryLee”;

user.Address = “中国 天津”;

lblName.DataContext = user;

lblAddress.DataContext = user;

}

private void btnUpdate_Click(object sender, RoutedEventArgs e)

{

user.Name = “李会军”;

user.Address = “China Tianjin”;

}

}

运行后如下所示:

单击Update按钮后:

绑定到列表

下面再看一个绑定到列表的简单例子,一般都会使用DataGrid或者ListBox来 进行列表数据的显示,

下面的示例我们显示一个文章列表:

Width=“240” Height=“36” Background=“Orange”

Margin=“20 0 0 0” HorizontalAlignment=“Left”>

HorizontalAlignment=“Left” VerticalAlignment=“Center”

Margin=“20 0 0 0”>

Margin=“40 10 10 10”

HorizontalContentAlignment=“Left” VerticalContentAlignment=“Bottom”

ItemsSource=“{Binding Posts}”>

编写一个简单的业务类:

public class Blog

{

public ListPosts { get; set; }

}

初始化集合数据并进行绑定

private void UserControl_Loaded(object sender, RoutedEventArgs e)

{

Blog blog = new Blog();

blog.Posts = new List

{

“一步一步学 Silverlight 2系列(10):使用用户控件”,

“一步一步学 Silverlight 2系列(9):使用控件模板”,

“一步一步学 Silverlight 2系列(8):使用样式封装控件观感”,

“一步一步学 Silverlight 2系列(7):全屏模式支持”

};

PostList.DataContext = blog;

}

最终运行的结果如下所示:

当然我们也可以使用ListBox的ItemsSource属性进行绑定,

结束语

本文简单介绍了Silverlight 2中的数据绑定,你可以下载文章示例代码。

本文配套源码

篇3:Flash MX 2004 数据绑定

数据

上篇文章:www.webjx.com/htmldata/2005-03-09/1110356957.html

格式化

好了!我们已经知道怎样从一个组件中得到一个值并且把这个值放在另外一个组件中,但是这通常是不够的。有时我们需要在组件中的数据以不同方式展现;有时需要两个组件展示不同的数据。

我们用格式化来实现这个目标。有几个内建的格式化工具你可以选择,同时你也可以自定义的格式,用AS2类。你可以选择在选择绑定时选择格式化工具并且从列表中选择它们。选择自定义的格式需要用到你自己的类。

我们以内建的格式开始,比如

Boolean(布尔值)

也许是最简单的内建格式化方式。它仅仅是一个布尔值(或真或假)并且输出一个字符串。你可以通过真或假来选择要描述的值――在格式化选项中。

Bool_formatter.fla

Compose String(排列字符串)

转换一个对象的域,形成单个字符串。你可以结合任何数量的域,也可以插入其他的字符。建立一个字符串模板,选择格式化选项并键入字符串。你也可以放置任何文本在这里,但是任何在””表示符中的内容将被做为一个域来处理。如果对象有子对象(比如XML)那么,你可以使用它们――通过点语法来获得它们的路径。字符串模板的例子如下:

Compose_formatter.fla

Date(日期)

把日期转换成字符串,简单的模板如“MM/DD/YYYY”。允许的格式“M”(月份),“D”(日期),“Y”(年份),“H”(小时),“N”(分钟)和“S”(秒)。你可以用格式化工具反向格式化字符串为日期,但是由于某种原因,这种做法仅仅用在双向绑定中。

Date_formatter.fla

Number (数字)

非常简单的格式化选项。可以显示十进制的数字。

Number_formatter.fla

Rearrange Fields (重新排列的域)

让你可以协调域,比如一个组件的数据源中的域名和另一个组件数据源的域名不同的情况下。域是以列表的形式成对出现在格式化选项中。比如一个简单的字符串:”label=name;data=colour;otherField=yetAnotherField”。这对于显示数据很有用,比如以下拉列表框和列表框显示数据;相应改变组件标签域属性,可以用重新排列的域格式化你想显示的作为标签的域。在这个例子中,一些XML文件已经加载了,用来移植到下拉列表框和它的域(重新排列的),所以名称属性被用作标签。

Rearrange_formatter.fla

要自定义格式,需要定义一个很简单的类,它有两个方法:格式化和非格式化,为每种类型提供一个依据,并且可以返回任何东西。在这个例子中,类格式化数字为英镑符号:

代码:
// class used to convert numbers to sterling currency and back again

class SterlingFormatter {

// turns a number into a string

function format (data:Number) : String{

var currency:String;

var pounds:Number = Math.floor(data);

var pence:Number = Math.round((data - pounds)*100);

var poundsStr:String = String(pounds);

var penceStr:String;

if(pence<10){

penceStr = “0” + String(pence);

}else{

penceStr = String(pence);

}

currency = “£” + pounds + “.” + penceStr;

return currency;

}

// removes sterling format and returns a number

function unformat (data:String) : Number {

var str:String = data.substr(1);

var num:Number = parseFloat(str);

return num;

}

}


键入一个数值在左边,看看有边会有什么格式产生

局限、防范、实践

创作时的数据绑定是基于mc路径的,这将带来一些局限和危险,

主要的问题是当你建立一个在两个组件之间的绑定时,这两个组件的实例必须被唯一的标识,而且这也依赖它们的路径。因此,如果你改变了一个组件的路径,之后再提供绑定,将会丢失这个绑定。尽管我已经注意到你可以安全的改变组件实例的名字不必改变它们的绑定。

通常,在运行时,组件可以从绝对路径上解决绑定问题。但是如果你提供到一个舞台上不存在的mc的绑定,绑定将从可以被识别的mc中选择“最远的”。问题是同样的mc将被不同的解释,如果该mc是在舞台上编辑过的或者在库中编辑的。要避免混乱、冲突、遗失已完成的内容,你需要遵循如下的指导方针:

1、    不要对这样的mc使用绑定:即在创作过程中加到舞台上,又使用了动态附加的;

2、    不要对舞台上选择了“编辑”过的符号提供数据绑定。使用“本地编辑”保护mc的内部结构关系;

3、    在加入绑定之前,谨慎的规划你的应用程序,如果程序很复杂的话。当你觉悟到因为所有的组件嵌套在一个mc里而使所有的绑定失去了作用,将是一件无法启齿的错误。

4、    如果要将应用程序动态的加载到其他的影片里,使用 _level替代影片的target。

总的说来,以上的讲解只是引导你用窗体建立最简单的应用程序的开始,你还要添加很多的场景和组件。使场景都这场运转起来后再加入数据绑定。最后一点要说明(有点讨厌但它也确实是个尖锐的问题,在很多情况都会发生)。

如果你已经看过源文件,你就会发现我在引导层加入了一些箭头符号。这对于简单的绑定来说无关紧要,但是一些复杂的系统绑定是很难跟踪的,所以我提倡这样做:用最原始的“文档”来说明你在做着什么。用语言来描述你所做的绑定是比较困难的,但是图示可以很只管的表达绑定的意思。如果一些东西需要比较详细的说明,那么在一个引导层用文本来注释是很有帮助的。这些箭头不是正是的符号,重要的是可以保留一些对将要发生的事情的暗示。

结束

数据绑定在MX2004中是个重要的主题,并且有很多方面我还没有涵盖到,包括运行时的API和身份认证。这本身就是个主题,但是很值得掌握――它涵盖了很多的功能,你可以节省很多的时间和精力,不用重新构建它。

然而你也许不会选择数据绑定面板来开发企业级应用程序,你也许直接会用运行时的API。但是数据绑定面板可以快速的提供一个原型或小型应用程序,因为它们提供了非常简单的方法来构建复杂的数据交互。身份认证和格式化都可以通过AS2实现可扩展功能,是没有限制的。

附源文件下载:

fmx2004-databinding.zip

fmx2004-databinding1.zip

fmx2004-databinding2-1.rar

fmx2004-databinding2-2.rar

篇4:silverlight 2.0 入门教程(三):数据的绑定网页设计

前言

由于这一段时间没有空余的时间来学习Silverlight,所没有把我的心理与体会共享出入,这在里我深表歉意,希望大家

对我的工作忙碌得到一下理解我会抽我更多的时间来写出更多的文章

在这章是我们主要是学会怎么来绑定数据,其实也没有什么可讲的,就是关于一个数据的绑定,代码很简单

目录:

新建一个实本类

文本框的绑定

datalist控件的绑定

代码下载

总结

结果浏览:

初始页面

TextBox绑定

ListBox绑定浏览页面

第一节   实体类

这一个实体类,主要是我们来给我们绑定数据的

代码如下:

public class User

{

private string _name;

public string Name

{

get {return_name;}

set{ _name=value;}

}

private int _age;

public int Age

{

get {return_age;}

set{ _age=value;}

}

}

第二节   文本框的绑定

在我的以前用到的如dataist.dropDownList,etc这样的控件大家不会陌生吧,silverligh与这些绑定没有什么大体上的区别

就是在你要绑定的的控件中的Text在写在你在Binding就OK了

先看下面的代码就知道:

姓名:

年龄

ListBox的绑定

我们看到其中的

利用了Text来绑定,其中Name,Age分别是绑定是的字段,就这么的简单

事件代码如下:

private void MyButton_Click(object sender,RoutedEventArgs e)

{

User user=new User;

user.Age=20;

user.Name=“good man”;

txtAge.DataContext=user;

txtName.DataContext=user;

}

第三节   datalist控件的绑定

datalist控件的绑定与TextBox绑定大同小异没有什么区别

代码如下

事件代码如下:

private void ListBinding_Click(object sender,RoutedEventArgs e)

{

User user=new User();

user.Age=20;

user.Name=“good man”;

MyListBox.DataContext=user.Name;

}

就这么简单哟,大家可以下来自己去试,没有什么可说的啊,试了比我在这里多就效果要好得多哟

第四节   代码下载

为了方便初学者的朋友点击这里可以下载源代码:/Files/caodaiming/SilverlightDemo4.rar

第五节      总结

其实在这里没有什么可以给大家总结的,这个与ASP.NET在的数据控件都差不了多少,原因也一样,唯一就是字母变了吗

希望初者一定下来要好好的实验,就要才会学到更多的新东西,由于时间有限我在这里就不多说了

最近工作有一点忙,没有更多的时间来写出文章,但是我会抽我的休息时间来写

请大家多关照,谢谢大家!

来自:silverlight 2.0 入门教程(三)

篇5:WPF/Silverlight2.0 Binding(数据绑定)机制详解

何为数据绑定

在WPF技术中控件基类(FrameworkElement、FrameworkContentElement)中DataContext属性实现了绑 定机制,在XAML中也支持此机制,当一个控件的DataContext发生变化时,其子控件的DataContext也会继 承父控件的DataContext(前提是这个子控件没有另外赋值)。子控件的属性获取数据源中的数据,支持 XAML通过Binding标记获取数据源中的值。数据源更新时刷新其每个子控件中的数据更新,实现一呼百应 的效果!

Binding绑定标记

XAML处理器支持绑定机制的语法,以{Binding PropertyName=Value}格式出现。其中PropertyName基 本分为“数据源指定标记、读取数据源标记、附加选项标记”,Value可以使用其它标记获取特殊的值。 绑定表达式中可以使用数据源标记、读取数据源标记、附加选项标记组合使用,也可以使用父控件绑定数 据源,子控件继承父控件的数据源并进行绑定。

语法

同于

数据源指定标记

Source属性:通过其它扩展标记制定任何类型的对象实例为数据源,可以使用StaticResource等标记 设置。例如:“{Binding Source={StaticResource xKeyElement}, XPath=//item}”,xKeyElement是 XMLDataProvider的对象,意思是获取以xKeyElement中所有以item为标签节点的数据为数据源。

ElementName属性:制定当前XAML文档中任何以(x:Name)名称为ElementName值的对象为数据源。例如 :“{Binding ElementName=ListBox1, Path=SelectedItem}”,意思是把ListBox1的SelectedItem属性 为当前控件的数据源。

RelativeSource属性:相对数据源,使用RelativeSource可以制定与自身相关联的对象为数据源。例 如:“RelativeSource={RelativeSource Self}}”,读者注意“中间的是RelativeSource{}是一个扩展 标记,而外面的RelativeSource={}是Binding标记的属性”。这段实例代码的意思是获取自身为数据源。

获取数据源标记

Path属性:于“数据源指定标记”一起使用,获取数据源中的成员(属性)。如果数据源对象继承了 ICustomeTypeDescriptor接口,将会从接口中获取属性值,否则使用类反射获取。例如:Text=“{Binding ElementName=ListBox1, Path=Items[0].Text}”,其中ElementName设置数据源,获取ListBox1.Items [0].Text并赋予给Text属性。

XPath属性:于“数据源指定标记”一起使用,通过XPath检索XML数据源内容。

官方实例代码段:

xmlns=“schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=“schemas.microsoft.com/winfx/2006/xaml”

Background=“Cornsilk”>

XML in Action

XML Web Technology

Programming Microsoft Windows With C#

C# Programming using the .NET Framework

Inside C#

C# Language Programming

Introducing Microsoft .NET

Overview of .NET Technology

Microsoft C# Language Specifications

The C# language definition

Classical Collection

Classical Music

Jazz Collection

Jazz Music

HorizontalAlignment=“Center”>XML Data Source Sample

Width=“400” Height=“300” Background=“Honeydew”>

XPath=“*[@Stock='out'] | *[@Number>=8 or @Number=3]”/>