你的位置:首页 > 软件开发 > ASP.net > silverlight简单数据绑定3

silverlight简单数据绑定3

发布时间:2015-12-18 16:00:05
3种数据绑定模式 OneTime(一次绑定) OneWay(单项绑定) TwoWay(双向绑定)OneTime:仅在数据绑定创建时使用数据源更新目标。列子:第一步,创建数据源对象让Person类实现INotifyPropertyChanged接口,该接口具有Property ...

3种数据绑定模式  OneTime(一次绑定) OneWay(单项绑定) TwoWay(双向绑定)

OneTime:仅在数据绑定创建时使用数据源更新目标。

列子:

第一步,创建数据源对象让Person类实现INotifyPropertyChanged接口,该接口具有PropertyChanged事件,PropertyChanged事件在数据源发生变化时候通知绑定

.cs

namespace SilverlightApplication2{  public class Person:INotifyPropertyChanged  {    public event PropertyChangedEventHandler PropertyChanged;    private String _Name;    public String Name    {      get { return this._Name; }      set      {        this._Name = value;        NotifyPropertyChanged("Name");      }    }    private int _Age;    public int Age    {      get { return this._Age; }      set      {        this._Age = value;        NotifyPropertyChanged("Age");      }    }    private String _Address;    public String Address    {      get { return this._Address; }      set      {        this._Address = value;        NotifyPropertyChanged("Address");      }    }    public void NotifyPropertyChanged(String propertyName)    {      if(PropertyChanged!=null)      {        PropertyChanged(this, new PropertyChangedEventArgs(propertyName));      }    }  }}
 ObservableCollection

这种方式称之为一般的实现方式, 因为它确实是太普通不过了, 而且使用起来也让人感到厌恶, 因为必须指定手工指定属性名称:

1

lambda 表达式实现方式

对 lambda 表达式比较熟悉的同学可以考虑用 lambda 表达式实现属性名称传递, 在 NotifyPropertyChanged 类添加一个这样的方法:

1

有了这个方法, NotifyPropertyChanged 基类使用起来就令人舒服了很多:

1

这样一来, 把属性名称用字符串传递改成了用 lambda 表达式传递, 减少了硬编码, 确实方便了不少, 但是还是感觉略微麻烦了一些, 还是要写一个 lambda 表达式来传递属性名称。

拦截方式实现

如果对 Castal.DynamicProxy 有印象的话, 可以考虑使用 DynamicProxy 进行拦截实现, 我的实现如下:

1

使用起来也是很方便的, 只是创建 ViewModel 对象时必须用帮助类来创建实例, 代码如下:

1

不过这种实现的缺点就是所有的属性都会触发 PropertyChanged 事件, 而且只能触发一个事件, 而在实际开发中, 偶尔需要设置一个属性, 触发多个 PropertyChanged 事件。

未来 .Net 4.5 的实现方式

在即将发布的 .Net 4.5 中, 提供了 CallerMemberNameAttribute 标记, 利用这个属性, 可以将上面提供的 SetProperty 方法进行改造, 这样的实现才是最完美的:

1

由于有了 CallerMemberName 标记助阵, 可以说使用起来是非常方便了:

1

这种方法虽然好,不过却只有在 .Net 4.5 中才有, 而且也许永远不会添加到 Silverlight 中。

 

第二步:用户界面绑定数据对象,指定绑定模式

.xaml

<Grid x:Name="LayoutRoot" Background="Wheat" Loaded="LayoutRoot_Loaded">    <StackPanel>      <TextBox Grid.Row="0" Grid.Column="0" Width="150" Height="30" HorizontalAlignment="Left" Text="{Binding Name,Mode=OneTime}"/>      <TextBox Grid.Row="1" Grid.Column="0" Width="150" Height="30" HorizontalAlignment="Left" Text="{Binding Age,Mode=OneTime}"/>      <TextBox Grid.Row="2" Grid.Column="0" Width="150" Height="30" HorizontalAlignment="Left" Text="{Binding Address,Mode=OneTime}"/>      <Button x:Name="btnUpdata" Width="150" Height="30" Content="更新" Click="btnUpdata_Click"/>    </StackPanel>  </Grid>

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:silverlight简单数据绑定3

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录