zoukankan      html  css  js  c++  java
  • Window Phone(SiliverLight)绑定数据到控件

    SliverLight for window phone 开发中的数据绑定主要是把数据源绑定显示到控件中,控件可能是单一数据控件,也可能是数据集合控件。

    绑定主要是把数据源和数据目标组合到一起。

    目标待绑定的属性必须是dependencyProperty依赖属性

    1.控件和单数据绑定

    添加一个TextBlock控件。 

    <TextBlock x:Name="tb1" Foreground="Blue" Text="{Binding}">

    文本控件的属性Text用来绑定显示数据,{Binding}表示绑定数据源,

    但是数据源我们在cs代码部分 设置。

    定义的MusicRecord类,文本控件显示这个MusicRecord的数据信息

     public class MusicRecord
    {
    public MusicRecord(string name, string music)
    {
    this.Name = name;
    this.Music = music;
    }
    public string Name
    {
    get;
    set;
    }
    public string Music
    {
    get;
    set;
    }
        //重写ToString方法
    public override string ToString()
    {
    return "Override" + this.Name + "__" + this.Music;
    }
    }

    在页面的加载方法中添加下面的代码

     MusicRecord music = new MusicRecord("王菲","因为爱情");

     this.tb1.DataContext = music;

    运行程序以后文本控件Textblock显示“Overrid王菲__因为爱情“。

    文本控件<TextBlock x:Name="tb1" Foreground="Blue" Text="{Binding}">中的绑定中没有指定数据源的具体某个属性,只是写了{Binding}那么Textblock默认

    就会去读取这个数据源的ToString()方法,所以我们重写了ToString()方法,把数据另外两个属性输出。

    如果绑定的时候指定了具体的属性,就不会调用ToString()方法

    <TextBlock x:Name="tb1" Foreground="Blue" Text="{Binding Name}">如此就会输出”王菲“


    2.绑定控件和集合数据对象


    更多的时候是绑定数据集合到一个控件中,下面的例子使用ObservableCollection,表示一个动态数据集合,在添加项、移除项或刷新整个列表时,此集合将提供通知。这个类继承了INotifyCollectionChanged, INotifyPropertyChanged。


    添加下拉框控件

    <ComboBox x:Name="ComboBox1" ItemsSource="{Binding}" Foreground="Black" FontSize="18" Height="50" Width="400"/>

    添加cs页面加载事件代码

     public ObservableCollection<MusicRecord> MyMusic = new ObservableCollection<MusicRecord>();

     MyMusic.Add(new MusicRecord("王菲","因为爱情"));
                MyMusic.Add(new MusicRecord("陈奕迅", "浮夸"));
                MyMusic.Add(new MusicRecord("李佳璐", "无法原谅"));
                MyMusic.Add(new MusicRecord("周杰伦", "青花瓷"));
                this.ComboBox1.DataContext = MyMusic;

    这样就可以把MyMusic集合对象绑定到ComboBox控件中,因为ItemsSource="{Binding}" ,所以遍历到单个数据的时候仍然会去绑定ToString方法。


    3.在控件红使用数据模板显示数据

    例子2中的绑定数据是使用Tostring()的默认方法,不能灵活的定义显示到控件上的内容和样式。

    通过使用数据模板,可以定义数据在控件中显示数据和显示样式。

    一般有两个形式,使用内容控件的ContentTemplate和集合控件的ItemTemplate。

    <ComboBox x:Name="ComboBox1" ItemsSource="{Binding}"  FontSize="18" Height="200" Width="400">
    <ComboBox.ItemTemplate>
    <DataTemplate>
    <StackPanel Orientation="Horizontal" Margin="2">
    <TextBlock Text="Name:" Margin="2" />
    <TextBlock Text="{Binding Name}" Margin="2" />
    <TextBlock Text="Music:" Margin="10,2,0,2" />
    <TextBlock Text="{Binding Music}" Margin="2" />
    </StackPanel>
    </DataTemplate>
    </ComboBox.ItemTemplate>


    4.绑定控件时的数据转换处理

    在绑定数据时候很多情况下,要对数据做些处理,比如数据源可能是加密数据,绑定显示的时候要解密出来,或者数据源是个日期格式,显示的时候用不同的格式

    来显示。这个时候就需要在展现的时候做转换处理,而不是对数据源做修改。

    之前有个文章说明过这个过程。

    WPF中数据源绑定数据控件的时候对数据源绑定数据做处理或者转换

    ==》点击连接


    5.控件和控件之间的绑定

    某些情况下控件的数据源是另外一个控件的属性,比如Textblock控件的数据Text属性会和Slider控件绑定,实时显示Slider的Value属性

    代码如下:提供了两种方式

    这个模式下ElementName指定数据源控件的Name,Path指定数据源控件的数据属性

    如果Path=value在前面,可以忽略“Path=”,直接写Value

    Text="{Binding ElementName=slider, Path=Value}" 

      

    <Slider Name="slider" Width="450" Height="30" Margin="24" Background="White"  Foreground="Blue" Value="90" Maximum="180" ></Slider>
    <TextBlock Width="400" Height="50">
    <TextBlock.Text>
    <Binding ElementName="slider" Path="Value"></Binding>
    </TextBlock.Text>
    </TextBlock>
    <TextBlock Width="400" Height="50" Text="{Binding ElementName=slider, Path=Value}" > </TextBlock>

    或者使用cs代码的方式

     Binding binding = new Binding();
    binding.ElementName = "slider";
    binding.Path = new PropertyPath("Value");
    tb1.SetBinding(TextBlock.TextProperty, binding);
    //或者使用下面的方式
    //BindingOperations.SetBinding(tb1, TextBlock.TextProperty, binding);


    6.数据绑定的模式

    首先数据绑定的时候,绑定的目标属性必须是依赖属性,

    而且数据绑定模式有三种

    // 摘要:
    // 描述数据如何在绑定中传播。
    public enum BindingMode
    {
    // 摘要:
    // 创建绑定时更新目标属性。对源对象的更改也会传播到目标。
    OneWay = 1,
    //
    // 摘要:
    // 创建绑定时更新目标属性。
    OneTime = 2,
    //
    // 摘要:
    // 在进行任一更改时会相应更新目标或源对象。创建绑定后,目标属性从源进行更新。
    TwoWay = 3,
    }





  • 相关阅读:
    怎样使用 Apache ab 以及 OneAPM 进行压力測试?
    opencv之haar特征+AdaBoos分类器算法流程(三)
    分区函数Partition By的与row_number()的用法以及与排序rank()的用法详解(获取分组(分区)中前几条记录)
    REST API 调用 方法
    WebApi的安全性及其解决方案
    使用Topshelf创建Windows服务
    LINQ查询操作符之First、FirstOrDefault、Last、LastOrDefault、ElementAt、ElementAtOrDefault、Contains、Any、All、Count
    sqlbulkcopy 多表批量保存
    C#使用HttpWebRequest和HttpWebResponse上传文件示例
    C#模拟客户端发送数据示例
  • 原文地址:https://www.cnblogs.com/zjypp/p/2343911.html
Copyright © 2011-2022 走看看