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,
}





原文地址:https://www.cnblogs.com/zjypp/p/2343911.html