注:本文由BeyondVincent(破船)原创首发
转载请注明出处:BeyondVincent(破船)@DevDiv.com
更多内容请查看下面的帖子
[DevDiv原创]Windows 8 开发Step by Step
小引
在Windows Store app开发中,数据绑定非常的重要,它提供了一个简单的方法,使我们的程序可以很方便的显示数据并与数据进行交互。今天我先给大家简单的介绍一下Windows Store app中的数据绑定,在后面的文章中,我会展开详细的介绍。
简介
数据绑定在UI控件中显示数据是非常重要的一部分内容。当任意一个UI控件使用了绑定,那么它将会显示出相应的数据。当然,很重要的一个因素就是当绑定的数据发生了改变,此时UI控件显示的内容就会自动的改变。同样,当用户在UI控件上做了改变,这些变动的数据也会被自动保存到数据对象中。
在数据绑定中,每一个绑定都有一个Mode属性,该属性决定了数据流是如何走向的。在Windows Store Apps中,如果使用XAML和C#开发,有3中Mode可以使用:
OneWay绑定
TwoWay绑定
Onetime绑定
OneWay
这是默认的绑定模型。OneWay绑定中,数据流的走向是从绑定源流向绑定目标的,不能反过来。当绑定源的数据发生了改变,那么绑定目标会得到更新。
示例:TextBox的Background为绑定目标,ListBox的SelectedItem.Content为绑定源
<Grid Background="BurlyWood">
<Grid Height="150" Width="165" >
<TextBox FontSize="30" Name="textBox" Margin="0,-117,-218,0" Height="82" VerticalAlignment="Top" Foreground="Red"
Text="OneWay绑定模式"
Background="{Binding ElementName=listBox, Path=SelectedItem.Content, Mode=OneWay}">
</TextBox>
<ListBox Name="listBox" FontSize="30" Margin="0,0,-218,-70">
<ListBoxItem Content="Green"/>
<ListBoxItem Content="Blue" IsSelected="True"/>
<ListBoxItem Content="Orange" />
</ListBox>
</Grid>
</Grid>
TwoWay
就如名字一样,TwoWay绑定模式可以在绑定源于绑定目标之间相互同步数据。也就是说,无论是绑定源还是绑定目标,谁的数据改变了,另外一方的数据也会得到更新。
示例:
<Grid Background="Green">
<Grid Height="180" Width="165">
<TextBox FontSize="30" Name="textBox" Margin="0,-101,-192,0" Height="56" VerticalAlignment="Top"
Text ="{Binding ElementName=listBox,
Path=SelectedItem.Content,
Mode=TwoWay}">
</TextBox>
<ListBox FontSize="30" Name="listBox" Margin="0,0,-192,-62" >
<ListBoxItem Content="破船"/>
<ListBoxItem Content="BeyondVincent"/>
<ListBoxItem Content="小破船"/>
<ListBoxItem Content="小BeyondVincent"/>
</ListBox>
</Grid>
</Grid>
当选择ListBox中的数据时,TextBox中的内容也会跟着改变
![](https://img-my.csdn.net/uploads/201211/13/1352818266_3875.jpg)
当在TextBox中修改文本内容,ListBox中对应选中项也会改变[注意,TextBox需要失去Focus,才会触发数据改变]
OneTime
OneTime绑定模式,数据流是从绑定源到绑定目标的,并且只有一次。当绑定源的数据第一次发生改变时,绑定目标会得到更新。以后绑定源再怎么改变,绑定目标都不会更新。当需要查看数据首次加载情况时,可以选择这种模式。
示例:
<Grid Background="Green">
<StackPanel Orientation="Vertical" VerticalAlignment="Center">
<Slider x:Name="sliderOneTimeDataSource" Minimum="1" Maximum="100" Value="50" Background="Wheat" Margin="593,0,354,0"/>
<TextBox x:Name="tbOneTimeDataBound" FontSize="50" Text="{Binding ElementName=sliderOneTimeDataSource, Path=Value, Mode=OneTime}" Height="86" Margin="608,0,354,0"/>
</StackPanel>
</Grid>
当源数据确定后,绑定就已经完成了。所以之后Slider再怎么改变数据,都不会影响到TextBox的内容。
![](https://img-my.csdn.net/uploads/201211/13/1352818681_2566.jpg)