一、绑定要点

一个标准的绑定三要素:绑定源、绑定方式、绑定目标。

例:<TextBox x:Name="MyTextBox" Text="Text" Foreground="{Binding Brush1, Mode=OneWay}"/>

TextBox.Foreground属性为绑定目标

Brush1为绑定源

花括号之间内容为绑定方式

只有依赖属性才可以做为绑定目标

1、绑定源

在SilverLight中存在三种不同的绑定源:一般绑定、元素绑定、位置绑定

一般绑定:【Source】  任何对象的引用  <TextBlock x:Name="TextBlock1" Text="test" Foreground="{Binding Path=color1, Source=vm}" />

元素绑定:【ElementName】  同一个XAML中的元素,以Name或x:Name关联  <TextBlock Text="{Binding ElementName=TextBlock1, Path=Text}" />

位置绑定:【RelativeSource】  相对于绑定目标的位置来指定数据源

有一个比较特殊的绑定叫模板内绑定【TemplateBinding】,某一个元素的模板内部,可以直接绑定到这个元素上的属性。在数据模板中特别有用。

<Button Content="Click">
  <Button.Template>
    <ControlTemplate>
      <TextBlock Text="{TemplateBinding Content}" />
    </ControlTemplate>
  </Button.Template>
</Button>

2、绑定方式

绑定的书写方式非常灵活,初学容易被混淆。

标准写法:  {Binding Path=PropertyName , Source=Object ……}  明确指定绑定源与绑定属性

变形一:    {Binding Path=PropertyName  ……}              只指定了绑定属性,省略绑定源时,以当前上下文为绑定源

变形二:    {Binding PropertyName  ……}                   省略”Path“标记

变形三:    {Binding Source=Object ……}                   只指定绑定源,绑定直接绑定到目标上。

也有一种特殊的绑定方式即资源绑定

这种方式可以直接将绑定源指向资源字典的某一项,比较常用,下面种写法不同,但效果相同

<Button Style="{StaticResource ButtonStyle}" />
<Button Style="{Binding Source={StaticResource ButtonStyle}}" />

3、绑定目标

绑定目标必须是依赖项属性

二、绑定标记扩展

绑定的标记扩展中有关键的几个需要牢记:Path、Source、ElementName、RelativeSource、Mode

其中Source、ElementName、RelativeSource是指定绑定源、Mode指定绑定模式、Path是指定绑定源的具体属性

在Path中可以使用点语法指定
Path=PropertyName.PropertyName2
也可以使用索引指定(无引号)
Path=PropertyList[0]
Path=PropertyList[Key]
也可以混合使用
Path=PropertyName.PropertyList[0]
Path=PropertyList[Key].PropertyName