一、数据绑定

  最简单的编程UI控件的方法是写自己的数据来获取和设置控件的属性,e.g. , textBox1.Text = "Hello, world"; 但在复杂的应用程序,这样的代码很快就会变得笨拙,容易出错

因此,为了更加方便,使用XAML数据绑定到你的UI链接到一个在应用程序中包含应用程序的数据的类。

  • 这个类class:是一个对于被称为视图模型的数据绑定(ViewModel)的数据源。
  • UI控件可以从视图模型Viewmodel类的属性自动获取其显示值,而且通过改变Viewmodel属性可以更新控件显示。

  • 用户的输入可以自动更新视图模型ViewModel类的绑定属性。

1、在xaml中数据绑定Data binding in XAML

如例子:

<TextBlock x:Name="DirectionsTextBlock" TextWrapping="Wrap"
Margin="12,0,0,0" Text="{Binding Directions}" />

在上面的例子中,TextBlock的Text属性绑定到一些数据源的特性。那么我们可以怎样要怎样定义数据源呢?下面是两种方法:

  • Datacontext:任何FrameworkElement派生类的DataContext属性(可以直接在控件设置,但通常是设置在一个容器类型的控件,如Grid,或者直接设置在Page上)
  • ItemSource:一些列表控件的ItemSource属性。

2、数据绑定模式Data binding modes

如例子:

 <TextBlock x:Name="DirectionsTextBlock" TextWrapping="Wrap"
Margin="12,0,0,0" Text="{Binding Directions, Mode=OneWay}" />

模式属性决定改变如何在目标控件和数据源之间的同步

  • OneTime--控件属性设置后,数据值之后的任何后续变化都会被忽略
  • OneWay--数据对象的变化是可以同步到控件属性,但反之不行
  • TwoWay --变化的数据对象是可以同步的控件属性,反之也可以。

3、INotifyPropertyChanged

对象被设置成OneWay或者Twoway绑定必须实现INotifyPropertyChanged接口。

我们可以在ViewModel类中写入如下代码:

public class ItemViewModel : INotifyPropertyChanged
{
private string _id;
/// Sample ViewModel property;
public string ID
{
get { return _id; }
set {
if (value != _id) {
_id = value;
NotifyPropertyChanged("ID"); }
} } public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (null != handler)
handler(this, new PropertyChangedEventArgs(propertyName));
}
}

这种方法还有更好的方法,有兴趣的可以去查阅相关资料。

4、数据绑定到列表Binding to Lists

 <ListView x:Name="IngredientsLIstBox"            ItemTemplate="{StaticResource MyDataTemplate}"            DataContext="{StaticResource RecipeViewModel}"/>            ItemsSource="{Binding Ingredients}"/>

在这个例子中,DataContext是RecipeViewModel对象,而ItemsSource绑定到名为Ingredients的对象,它里面是对象的集合。但是,如果你希望当子项目被添加或删除而你的UI能自动更新时,数据源应该是一个ObservableCollection<T>(实现了INotifyCollectionChanged),而且在集合中的项目需要实现INotifyPropertyChanged。就如同:

public class RecipeDetails : INotifyPropertyChanged
{
/// <summary>
/// A collection for ItemViewModel objects.
/// </summary>
public ObservableCollection<ItemViewModel> Items { get; private set; } public void LoadData()
{
this.Items.Add(new ItemViewModel() { ID = "", LineOne = "runtime one", LineTwo = ... });
this.Items.Add(new ItemViewModel() { ID = "", LineOne = "runtime two", LineTwo = ... });
this.Items.Add(new ItemViewModel() { ID = "", LineOne = "runtime three", LineTwo =...});
} ...}

5、数据绑定提高:FallBackValue and TargetNullValue

TargetNullValue允许你当指定数据源的属性返回空时,指定替代属性或值时显示的属性。

<Button Content="{Binding Path=NextItem, Mode=OneWay,
TargetNullValue={Binding Path=NullValue}}" />

FallbackValue允许当你被绑定到属性不存在指定替代属性或值显示。

<TextBlock Text="{Binding Path=badPath,
FallbackValue='this is a fallback value'}"
Grid.Column="1"> </TextBlock>

WP8.1 Study5:Data binding数据绑定的更多相关文章

  1. Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion(一)

    题外话:本篇是对之前那篇的重排版.并拆分成两篇,免得没了看的兴趣. 前言 在Spring Framework官方文档中,这三者是放到一起讲的,但没有解释为什么放到一起.大概是默认了读者都是有相关经验的 ...

  2. WPF QuickStart系列之数据绑定(Data Binding)

    这篇博客将展示WPF DataBinding的内容. 首先看一下WPF Data Binding的概览, Binding Source可以是任意的CLR对象,或者XML文件等,Binding Targ ...

  3. XAML数据绑定(Data Binding)

    XAML数据绑定(Data Binding)   Data Binding可以使得XAML标签属性的赋值更为灵活和方便.在绑定过程中,获取数据的标签成为目标标签:提供数据的标签成为源标签.在XAML中 ...

  4. Android开发教程 - 使用Data Binding(五)数据绑定

    本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...

  5. Android Data Binding(数据绑定)用户指南

    Android Data Binding(数据绑定)用户指南 http://www.jianshu.com/p/b1df61a4df77 https://github.com/LyndonChin/M ...

  6. Data Binding MVVM 数据绑定 总结

    示例代码:https://github.com/baiqiantao/DataBindingTest 参考:精通Android Data Binding    Android Data Binding ...

  7. WPF中的数据绑定Data Binding使用小结

    完整的数据绑定的语法说明可以在这里查看: http://www.nbdtech.com/Free/WpfBinding.pdf MSDN资料: Data Binding: Part 1 http:// ...

  8. Data Binding(数据绑定)用户指南

    1)介绍 这篇文章介绍了如何使用Data Binding库来写声明的layouts文件,并且用最少的代码来绑定你的app逻辑和layouts文件. Data Binding库不仅灵活而且广泛兼容- 它 ...

  9. Spring中的类型转换与数据绑定(PropertyEditor、ConversionService、Data Binding、Formatter)

    Spring早期使用PropertyEditor进行Object与String的转换.到Spring 3后,Spring提供了统一的ConversionService API和强类型的Converte ...

随机推荐

  1. ps aux和ps ef的区别

    ps aux 是以BSD方式显示ps -ef 是以System V方式显示,该种方式比BSD方式显示的多一重要项--(具体哪项忘了 -_- ) ps aux的输出: USER PID %CPU %ME ...

  2. uva 11728 Alternate Task

    vjudge 上题目链接:uva 11728 其实是个数论水题,直接打表就行: #include<cstdio> #include<algorithm> using names ...

  3. hdu 1573 X问题

    数论题,本想用中国剩余定理,可是取模的数之间不一定互质,用不了,看到网上有篇文章写得很好的:数论——中国剩余定理(互质与非互质),主要是采用合并方程的思想: 大致理解并参考他的代码后便去试试hdu上这 ...

  4. sqlserver 2008 服务器拒绝连接;拒绝访问指定的数据库

    sqlserver配置管理器----sqlserver网络配置 --- 启用 named pipes OK 由于之前的程序是SQL2000开发的,迁移到SQL20008出了这个问题. 二 和主题没有什 ...

  5. crontab在一秒内刷新多次导致部分脚本不生效的问题分析

    版权声明:本文由康中良原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/182 来源:腾云阁 https://www.qclo ...

  6. Unity4.3 遮挡剔除:基本知识

    http://blogs.unity3d.com/2013/12/02/occlusion-culling-in-unity-4-3-the-basics/ 这篇博文由Umbra Software的J ...

  7. isDebugEnabled作用

       早上写了日志级别,然后想起在使用的时候经常用isDebugEnabled,一鼓作气.彻底弄懂它: 现象 if (logger.isDebugEnabled()) { logger.debug(m ...

  8. 笔记5:QQ群聊天机器人

    之前经常在别人群里看到有自动回复消息的机器人. 功能有好多,可以玩各种游戏.觉得还蛮有意思的.. 于是就去请教别人怎么弄得,但是他们都说得好复杂,好高大上,无非就是不想让别人弄 本人是个不会轻易放弃的 ...

  9. NOR FLASH与NAND FLASH的区别

    NOR和NAND是现在市场上两种主要的非易失闪存技术.Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面.紧接着,1989年,东芝公司发表了 ...

  10. 意外的节点类型 Element。只能在简单内容或空内容上调用 ReadElementString 方法

    问题出现的情景: 在调用携程团购接口时,需要把获取的xml字符串反序列化实体对象,出现了这个错误. 详情: 在对xml文档有这样一条语句“ <Description Category=" ...