2、将数据对象存储为资源@H_450_27@
提供一篇
文章,供大家参
考:
Using Static Resource in Silverlight 3 Application
首先要在类
代码中存在
一个资源对象,
代码
- namespace Silverlight
- {
- public class Users
- {
- public String Firstname { get; set; }
- public String Lastname { get; set; }
- }
- public partial class DataBindingDemo : UserControl
- {
- public DataBindingDemo()
- {
- InitializeComponent();
-
- }
- }
- }
复制代码
在控件中存储资源
- <UserControl x:Class="Silverlight.DataBindingDemo"
- xmlns="http://scheR_946_11845@as.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://scheR_946_11845@as.microsoft.com/winfx/2006/xaml"
- xmlns:local="clr-namespace:Silverlight"
- Width="400" Height="300">
- <UserControl.resources>
-
- <local:Users x:Key="SingleUser" Firstname="virus" Lastname="ssss"></local:Users>
- </UserControl.resources>
- <Grid x:Name="LayoutRoot" BACkground="White">
- <TextBox Text="{Binding Path=Firstname,source={Staticresource SingleUser}}"></TextBox>
- </Grid>
-
- </UserControl>
复制代码
上面的红色部分的xmlns:local="clr-namespace:Silverlight"是定义资源的命名空间,
- <UserControl.resources>
-
- <local:Users x:Key="SingleUser" Firstname="virus" Lastname="ssss"></local:Users>
- </UserControl.resources>
复制代码
是定义
一个资源
是绑定到控件,源是SingleUser,绑定的具体
属性是 Firstname。如果是绑定
一个属性的话,每次都需要设置
source的值,如果是绑定到
一个Grid上面的话,可以使用<Grid Name="gridUsers" DataCo
ntext="
{Static
resource SingleUser}">来绑定。
3、可编辑的双向绑定@H_450_27@
到这里你可能想要知道,如果我在界面上
修改一个值,
会发生什么呢?例如你
修改了界面上面的文本框的值,文本框的值绑定了
一个对象的
属性,在内存中的对象
属性会改变吗?
实际上,内存中的对象
属性没有任何变化,
因为Silverlight
默认使用单向绑定。
Sy
stem.Window
s.Data
.bindingMode枚举量中定义了全部的绑定类型,
如下表:
@H_404_388@Name
@H_404_388@ Description
@H_404_388@OneWay
单向绑定
@H_404_388@ 当对象属性改变的时候,绑定对象就会改变
@H_404_388@TwoWay
双向绑定
@H_404_388@ 当源对象属性改变的时候,绑定对象会改变;反过来,绑定对象的改变也会影响源对象属性的改变。
@H_404_388@OneTime
一次性绑定
@H_404_388@ 绑定对象在第一次初始化的时候显示对象的属性,后面不会随着对象属性的改变而改变,这种适用于你确定对象的属性几乎不会改变的情况下。
- <TextBox Text="{Binding Firstname,Mode=TwoWay}"></TextBox>
复制代码
如果你使用了双向绑定,如果你
修改了text
Box的值,当
你的鼠标焦点一离开text
Box之后(焦点在两外
一个控件,或者点击
一个按钮),内存中的对象
属性Firstname就
会发生改变,执行
属性的set。
使用了双向绑定之后,焦点一离开控件之后就会触发内存对象的改变,但是有的时候我们想精确控制,而不是等焦点移除的时候,例如:输入框在
用户输入的同时就进行,而不是等
用户焦点移出输入框,你可以在
代码中
调用 BindingExpression.
update
source(
);
代码
- private void txtFirstname_TextChanged(object sender,TextChangedEventArgs E)
- {
- BindingExpression expression = txtFirstname.GetBindingExpression(TextBox.TextProperty);
- expression.updatesource();
- }
复制代码
使用上面的
代码,你就可以在
用户进入文本框和输入的时候就强迫文本框更新源对象的
属性值。如果你全部的控件都是用这样的更新方式,你就可以禁用 Silverlight的
自动更新
功能,设置
update
source
trigger
属性的值为Explicit。
代码
- <TextBox x:Name="txtFirstname"
- Text="{Binding Path=Firstname,source={Staticresource SingleUser},Mode=TwoWay,updatesourcetrigger=Explicit}"
- TextChanged="txtFirstname_TextChanged"></TextBox>
复制代码
在Silverlight中
update
source
trigger有两个
属性值可以设置:Default和Explicit。
4、数据验证 Validation@H_450_27@
数据验证将在
下一篇中重点讲解。先提供
一个实例
代码下载:DataValidation
验证的话,就需要Silverlight客户端和wcf服务端共享类库,共享
实体类,因为服务端的
实体类虽然被序列化到客户端,但是只能序列化状态信息,就是成员,
方法之类的不会序列化的,而且就算序列化过来,也没有什么用,运行环境co
ntext都不一样了,没有什么意思。所以可能会用到客户端和服务端共享类库,
可以参考下面的
文章。
Silverlight客户端和WCF服务器端共享类库