silverlight数据绑定

控件绑定

    <Grid x:Name="LayoutRoot">
        <StackPanel>
            <ScrollBar x:Name="bar" Orientation="Horizontal" Height="20" />
            <TextBox x:Name="tb" Text="{Binding ElementName=bar, Path=Value, Mode=OneWay,
                UpdateSourceTrigger=Default}" />
        </StackPanel>
    </Grid>

这段XAML代码定义了一个ScrollBar和一个TextBox,TextBox的Text会随着ScrollBar的拖动改变,范围从0到1.

Mode

为BindingMode枚举,有三个值,分别为OneTime,OneWay,TwoWay,分别是单次绑定,单向绑定和双向绑定。将上面代码的Mode改为TwoWay后,对TextBox值的更改同样也会影响ScrollBar的位置。

UpdateSourceTrigger

更改TextBox的值后,ScrollBar只有在TextBox失去焦点后才会做出改变。要改变这个行为,就需要更改UpdateSourceTrigger属性。同样有三个值:Default,PropertyChanged,Explicit。PropertyChanged会使ScrollBar实时反映TextBox的更改。而将属性改为Explicit后,就只能手动做出更新,方法如下:

            tb.GetBindingExpression(TextBox.TextProperty).UpdateSource();

Path

绑定的Path可以不只是一个属性,比如

<TextBox x:Name="tb1" Text="{Binding ElementName=LayoutRoot, Path=Children[0].Children[0].Value}" />

但这是个傻例子 -_- 另外此时VS不会提供代码提示,出错的机会较大。

TypeConverter

实现一个Converter,将double转换为string并保留两位小数

    public class MyConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return ((double)value).ToString(".00");
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return double.Parse(value.ToString());
        }
    }

<navigation:Page x:Class="SilverlightApp.DataBinding"
           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"
           mc:Ignorable="d"
           xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
           xmlns:local="clr-namespace:SilverlightApp"
           d:DesignWidth="640" d:DesignHeight="480"
           Title="DataBinding Page">
    <navigation:Page.Resources>
        <local:MyConverter x:Key="conv"/>
    </navigation:Page.Resources>
    <Grid x:Name="LayoutRoot">
        <StackPanel>
            <ScrollBar x:Name="bar" Orientation="Horizontal" Height="20" />
            <TextBox x:Name="tb" Text="{Binding ElementName=bar, Path=Value, Mode=OneWay, Converter={StaticResource conv}, UpdateSourceTrigger=Default}" />
        </StackPanel>
    </Grid>
</navigation:Page>

Source/DataContext

如果数据源不是控件,应该使用Source属性。或者使用DataContext,此属性会在element tree中继承。一个Grid如果拥有DataContext,那么Grid中的所有element都可以绑定到此DataContext上。如下:

 public class Contry
    {
        public string Name { get { return "China"; } }
    }

XAML

<navigation:Page x:Class="SilverlightApp.DataBinding"
           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"
           mc:Ignorable="d"
           xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
           xmlns:local="clr-namespace:SilverlightApp"
           d:DesignWidth="640" d:DesignHeight="480"
           Title="DataBinding Page">
    <navigation:Page.Resources>
        <local:Contries x:Key="contry"/>
    </navigation:Page.Resources>
    <Grid x:Name="LayoutRoot">
        <StackPanel>
            <TextBox DataContext="{StaticResource contry}" Text="{Binding Name, Mode=OneWay}" />
            <TextBox Text="{Binding Name, Source={StaticResource contry}}" />
        </StackPanel>
    </Grid>
</navigation:Page>

两个TextBox都可以正确的显示出“China”.

绑定目标必须是dependency property, 所以textbox.text可以,run.text不行,C#代码中,setbinding中第一个参数就是是dp

时间: 2024-08-01 22:38:50

silverlight数据绑定的相关文章

silverlight教程 silverlight 数据绑定

以往为了做wtt测试,曾经写过一个sample 的WPF application.对于silverlight的了解,仅限于是web 版的WPF..... 关于silverlight,以前也做过一个sample,但仅仅是拖动一些控件到页面上,无任何其他功能. 今天做的这个silverlight程序,相当于把培训的内容重新复习了一遍,包含两个内容: 1. silverlight 简单数据绑定. 2.silverlight 4 新增的ICommand 接口的使用. 3.silverlight 中简单的

Silverlight项目笔记1:UI控件与布局、MVVM、数据绑定、await/async、Linq查询、WCF RIA Services、序列化、委托与事件

最近从技术支持转到开发岗,做Silverlight部分的开发,用的Prism+MVVM,框架由同事搭好,目前做的主要是功能实现,用到了一些东西,侧重于如何使用,总结如下:   1.UI控件与布局     2.MVVM     3.数据绑定     4.await/async     5.Linq查询     6.WCF RIA Services     7.序列化     8.委托与事件 1.UI控件与布局 常用的主要是Grid.StackPanel.Border,其中最常用的的是Grid,是一

Silverlight中ListBox的数据绑定

在Silverlight中ListBox是一个非常强大的控件.总结下ListBox的绑定数据的方式. 首先,新建一个Book类, 1 public class Book 2 { 3 public string BookName { get; set; } 4 5 public string Author { get; set; } 6 } 接下来BookViewModel.cs中, 1 public class BookViewModel 2 { 3 private List<Book> bo

silverlight简单数据绑定3

3种数据绑定模式  OneTime(一次绑定) OneWay(单项绑定) TwoWay(双向绑定) OneTime:仅在数据绑定创建时使用数据源更新目标. 列子: 第一步,创建数据源对象让Person类实现INotifyPropertyChanged接口,该接口具有PropertyChanged事件,PropertyChanged事件在数据源发生变化时候通知绑定 .cs namespace SilverlightApplication2 { public class Person:INotify

Silverlight项目笔记7:xml/json数据解析、MVVM下实现多级树形结构TreeView、忽视引用类型导致数据绑定错误、通过流或动态空间加载图片、虚拟目录设置、silverlight安全机制引发的问题、WebClient缓存问题

涉及的内容主要有: 1.xml/json数据解析 2.多级树形结构TreeView 3.忽视引用类型导致数据绑定错误 4.通过流或动态空间加载图片 5.虚拟目录设置 6.silverlight安全机制引发的问题 7.webclient缓存问题 1.xml/json数据解析 (1)xml数据解析 使用WebClient获取数据,获取到的数据实例化为一个XDocument,使用XDocument的Descendants(XName)方法获得对应节点的数据集合,再通过Element这个方法对数据集合进

Silverlight&#160;中&#160;TreeView&#160;的数据绑定

Silverlight使用XAML标记语言来编写,如果不使用XAML强大的绑定功能,实在是罪过.通过使用绑定,可以将UI与视图模型层分离,有利于系统的维护.作为Silverlight中比较有代表型的一个控件: TreeView 有着比较特殊的绑定.与一般的绑定不同,绑定到TreeView的元素之间是一个无限级联的关系.下面是这种绑定的最简单实现过程. 1, 引用命名空间:clr­namespace:System.Windows?assembly=System.Windows.Controls:给

silverlight简单数据绑定2

<Grid x:Name="LayoutRoot" Background="white" Loaded="LayoutRoot_Loaded" ShowGridLines="False"> <Grid.RowDefinitions> <RowDefinition Height="40"></RowDefinition> <RowDefinition He

ArcGIS API for Silverlight 调用GP服务加载等值线图层

原文:ArcGIS API for Silverlight 调用GP服务加载等值线图层 第二篇.Silverlight客户端调用GP服务 利用ArcGIS API for Silverlight实现GP服务调用,这里的雨量数据是通过一个WebService获取而来,主要信息是雨量站点的经纬度坐标值和某个时间段内的降雨量值三个主要字段. 以下是核心代码部分: <UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/pr

WPF——数据绑定及属性改变事件

一.首先需要封装一下文本框的属性,并且在实体类中添加一个实体类的属性改变函数 public class User : INotifyPropertyChanged //INotifyPropertyChanged接口是 WPF/Silverlight 开发中非常重要的接口, 它构成了 ViewModel 的基础, 数据绑定基本上都需要这个接口. { private string _Wenben; public string Wenben { get { return _Wenben; } set