Silverlight实用窍门系列:56.Silverlight中的Binding使用(一)【附带实例源码】

        本文将详细讲述Silverlight中Binding,包括Binding的属性和用法,Binding的数据流向。

        Binding:一个完整的Binding过程是让源对象中的某个属性值通过一定流向规则进行转换验证之后绑定到目标对象的某个属性上面。这个源对象由ElementName指定,源对象的属性由Path指定,流向规则由Mode指定,转换由Converter指定,验证由ValidatesOnDataErrors等指定。

        首先我们来看Binding的属性如下:

    ElementName:指定源对象的名称

    Path:指定需要绑定的源对象的属性名称

    Mode:指定Binding的数据流向规则

    Converter:指定源对象的属性需要经过用户自定义的转换

        其次我们来看看Binding的数据流向Mode分为以下几种:

    OneTime:源对象的属性只有在第一次的时候绑定到目标对象,以后源对象属性值变化时,目标对象值不变

    OneWay:源对象的属性值变化的时候,目标对象值也跟着相应变化,而目标对象值变化时,源对象属性值不变

    TwoWay:源对象的属性值变化的时候,目标对象值也跟着相应变化,目标对象值变化时,源对象属性值也跟着变

         下面我们通过以下实例源码来看看Binding的简单应用和转换,注意Mode为TwoWay的时候目标对象更新时需要转移焦点(LostFocus)才触发更新源对象。例如本文实例中需要点击到另外的TextBox才更新源。

Xaml:

<UserControl x:Class="SLBinding.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:SLBinding"
mc:Ignorable="d"
d:DesignHeight="600" d:DesignWidth="800"
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">
<UserControl.Resources>
<local:ImageConverter x:Key="ImageCoverter"/>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
<!--One Time-->
<StackPanel Orientation="Horizontal">
<sdk:Label Height="28" HorizontalAlignment="Left" Margin="130,56,0,0"
Name="label1" VerticalAlignment="Top" Width="120" Content="One Time:" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="20,56,0,0"
Name="tbOneTimeSource" VerticalAlignment="Top" Width="120" Text="初次绑定" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="20,56,0,0"
Name="tbOneTimeTarget" VerticalAlignment="Top" Width="120"
Text="{Binding ElementName=tbOneTimeSource, Path=Text, Mode=OneTime}"/>
</StackPanel>
<!--One Way-->
<StackPanel Orientation="Horizontal">
<sdk:Label Height="28" HorizontalAlignment="Left" Margin="130,100,0,0"
Name="label2" VerticalAlignment="Top" Width="120" Content="One Way:" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="20,100,0,0"
Name="tbOneWaySource" VerticalAlignment="Top" Width="120" Text="单向绑定" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="20,100,0,0"
Name="tbOneWayTarget" VerticalAlignment="Top" Width="120"
Text="{Binding ElementName=tbOneWaySource, Path=Text, Mode=OneWay}"/>
</StackPanel>
<!--Two Way-->
<StackPanel Orientation="Horizontal">
<sdk:Label Height="28" HorizontalAlignment="Left" Margin="130,150,0,0"
Name="label3" VerticalAlignment="Top" Width="120" Content="One Time:" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="20,150,0,0"
Name="tbTwoWaySource" VerticalAlignment="Top" Width="120" Text="双向绑定" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="20,150,0,0"
Name="tbTwoWayTarget" VerticalAlignment="Top" Width="120"
Text="{Binding ElementName=tbTwoWaySource, Path=Text, Mode=TwoWay}"/>
</StackPanel>

<!--Converter-->
<StackPanel Orientation="Horizontal">
<sdk:Label Height="28" HorizontalAlignment="Left" Margin="130,220,0,0"
Name="label5" VerticalAlignment="Top"
Content="下面将网络图片地址使用Converter自动绑定转换为图片显示出来 " />
</StackPanel>
<StackPanel Orientation="Horizontal">
<sdk:Label Height="28" HorizontalAlignment="Left" Margin="130,250,0,0"
Name="label4" VerticalAlignment="Top" Width="120" Content="Converter:" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="20,250,0,0"
Name="tbConverter" VerticalAlignment="Top"
Text="http://sc.admin5.com/uploads/allimg/100211/105R33342-7.png" />
<Image Name="imgCity" Width="60" Height="60"
Source="{Binding ElementName=tbConverter,Path=Text,
Mode=TwoWay, Converter={StaticResource ImageCoverter}}"></Image>
</StackPanel>
</Grid>
</UserControl>

 

ImageConverter.cs

   public class ImageConverter : IValueConverter
{
//在载入数据的时候将数据转换为图片类型
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
try
{
Uri uri = new Uri((string)value, UriKind.RelativeOrAbsolute);
BitmapImage img = new BitmapImage(uri);
return img;
}
catch
{
return new BitmapImage();
}
}

//在页面上操作的时候,将图片类型转换为数据,这里只有再TwoWay的时候才有用
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
BitmapImage img = value as BitmapImage;
return img.UriSource.AbsoluteUri;
}
}

        下面我们来看看本实例运行效果如下图,如需源码请点击 SLBinding.zip 下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404420.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jqGrid + JSON + WebService 完整示例

真没找到这样的例子&#xff0c;于是自已写了个&#xff0c;分享出来。 第一步&#xff0c;首先在WebService上&#xff0c;添加[System.Web.Script.Services.ScriptService]属性标签&#xff0c;让WebServer支持JSON. namespace jqGrid_JSON_WebService_Sample.Services{/// &…

交叉编译和交叉调试环境搭建及使用

From: http://blog.chinaunix.net/uid-25119314-id-226230.html 1. 交叉编译器 1.1 交叉编译器介绍 在一种计算机环境中运行的编译程序&#xff0c;能编译出在另外一种环境下运行的代码&#xff0c;我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说&…

Hello Views之Spinner(yaozq翻译,仅供参考)

Spinner是一种类似于下拉列表的widget。 在这个教程中&#xff0c;你将创建一个简单的用于展示星球列表的spinner组件。当选择列表中的一项时&#xff0c;将会弹出一个表示所选项的toast信息。下面是具体步骤&#xff1a; 1&#xff0c;新建一个名为HelloSpinner的项目。 2&…

Bitmap 之 getPixels() 的 stride

学习Graphics中遇到位图(Bitmap)中getPixels()方法&#xff0c;对该方法的用法大体理解&#xff0c;但对其中的stride参数却不明白具体的用法以及用意&#xff0c;现记述过程如下&#xff1a; getPixels()方法的用处为获取位图(Bitmap)中的像素值(颜色值)&#xff0c;存入类型为…

i++ 和 ++i 效率的分析以及自定义类型的自增/自减运算符重载实例

From: http://blog.csdn.net/leo115/article/details/8101541 我们通常在写for循环 的时候&#xff0c;要实现变量 i 的自增 1 &#xff1b;往往会在i 和i中随便挑一种写&#xff0c;对于i和i的理解&#xff0c;我们往往停留在返回的值的不同&#xff0c;其实i与i在实现效率上…

BZOJ 1146: [CTSC2008]网络管理Network( 树链剖分 + 树状数组套主席树 )

树链剖分完就成了一道主席树裸题了, 每次树链剖分找出相应区间然后用BIT(可持久化)权值线段树就可以完成计数. 但是空间问题很严重....在修改时不必要的就不要新建, 直接修改原来的..详见代码. 时间复杂度O(N*log^3(N))------------------------------------------------------…

struts2遍历select

2019独角兽企业重金招聘Python工程师标准>>> <s:bean name"org.apache.struts2.util.Counter" id"counter"> <s:param name"first" value"1" /> <s:param name"last" value"pageCount"…

Oracle 彻底 kill session

为什么80%的码农都做不了架构师&#xff1f;>>> --*************************** -- Oracle 彻底 kill session --*************************** kill session 是DBA经常碰到的事情之一。如果kill 掉了不该kill 的session&#xff0c;则具有破坏性&#xff0c;因此尽…

WebService学习总结——调用第三方提供的webService服务

互联网上面有很多的免费webService服务&#xff0c;我们可以调用这些免费的WebService服务&#xff0c;将一些其他网站的内容信息集成到我们的Web应用中显示&#xff0c;下面就以获取天气预报数据。气象中心的管理系统将收集的天气信息并将数据暴露出来(通过WebService Server)…

【017】◀▶ C#学习(九) - ADO.NET

《C#入门经典&#xff08;中文第四版&#xff09;》在程序中访问数据库学习笔记 --------------------------------------------------------------------------------------------------------- ●● 目录&#xff1a; A0 ………… System.Data.SqlClient 命名空间 A1 ……………

【转】主流PHP框架间的比较(Zend Framework,CakePHP,CodeIgnit...

2019独角兽企业重金招聘Python工程师标准>>> 【转】主流PHP框架间的比较&#xff08;Zend Framework&#xff0c;CakePHP&#xff0c;CodeIgniter&#xff0c;Symfony&#xff0c;ThinkPHP&#xff0c;FleaPHP&#xff09; 2011年08月14日 星期日 12:51 转载自 leol…

如何利用业务时间提升自我

转载于:https://www.cnblogs.com/helloIT/articles/5140273.html

ping得通外网,上得了QQ,游戏,却打不开网页。

操作系统&#xff1a;win7_64bit 下午帮我小艾优化电脑&#xff0c;不知道把什么插件给卸载了。 她回来以上就上不了网&#xff0c;我首先ping网关&#xff0c;DNS&#xff0c;外网&#xff0c;都通。 登QQ正常。 我的思路&#xff1a; 先把Socket套字结相关的卸载掉就是&#…

WebGIS中一种根据网格索引判断点面关系的方法

文章版权由作者李晓晖和博客园共有&#xff0c;若转载请于明显处标明出处&#xff1a;http://www.cnblogs.com/naaoveGIS/。 1.背景 判断点面关系的算法有很多&#xff0c;在我之前的博文中有一篇专门对其进行了描述&#xff1a;判断点是否落在面中的Oracle存储过程描述。其中提…

为Ubuntu Server 安装图形桌面环境

From: http://www.oschina.net/question/12_10835 第一步&#xff1a;安装桌面环境 首先需要确保您已经在/etc/apt/sources.list 文件中启用了Universe和Multiverse软件库&#xff0c;接下来执行如下命令&#xff1a; sudo apt-get update sudo apt-get install ubuntu-desk…

iSensor APP 之 摄像头调试 OV3640 OV2640 MT9d112

iSensor app 非常适合调试各种摄像头&#xff0c;已测试通过的sensor有&#xff1a; l OV7670、OV7725、OV9650、OV9655、OV9653、OV5642、OV5640 l MT9T001、MT9M001、MT9P031 今天又测试了上述几款新的型号&#xff0c;之前并未用过。 OV3640 OV2640 MT9d112 先看OV2640&am…

查询优化器内核剖析第四篇:从一个实例看执行计划

查询优化器内核剖析第四篇&#xff1a;从一个实例看执行计划系列文章索引&#xff1a; 查询优化器内核剖析第一篇 查询优化器内核剖析第二篇&#xff1a;产生候选执行计划&执行计划成本估算 查询优化器内核剖析第三篇&#xff1a;查询的执行与计划的缓存 &…

Makefile中自定义函数的调用

From: http://www.cnblogs.com/MyEyes/archive/2012/01/12/2320589.html 自己学习脚印&#xff0c;不喜勿喷&#xff0c;谢谢 ~ Makefile中函数定义&#xff1a; external/genext2fs/Config.mk # $(1): src directory # $(2): output file # $(3): label (if any) # $(4): …

python selenium ---键盘事件

转自&#xff1a;http://www.cnblogs.com/fnng/p/3258946.html 本节重点&#xff1a; l 键盘按键用法l 键盘组合键用法l send_keys() 输入中文运行报错问题键盘按键键用法&#xff1a; #codingutf-8 from selenium import webdriver from selenium.webdriver.common.keys impor…

Eclipse中使用自己的makefile管理工程

From: http://blog.csdn.net/whz_zb/article/details/7101164 我用的环境&#xff1a; &#xff08;1&#xff09;系统&#xff1a; Ubuntu 11.04 &#xff08;2&#xff09;Eclipse CDT 1. 在建立工程的时候选择makefile工程。 2.将makefile文件和你写好的工程文件&#x…