深入浅出WPF 第二部分(3)
6.3.4 “没有Path”的Binding
如果Binding源本身就是数据且不需要Path来指明,这时我们只需将Path的值设置为"."就可以了。在XAML代码里这个"."可以省略不写,但在C#代码里却不能省略。
[html]
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource ResourceKey=str1}"/>
</Grid>
<Window.Resources>
<sys:String x:Key="str1">菩提本无树,明镜亦非台。</sys:String>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource ResourceKey=str1}"/>
</Grid>
<Window.Resources>
<sys:String x:Key="str1">菩提本无树,明镜亦非台。</sys:String>
</Window.Resources>
[html]
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
</Grid.RowDefinitions>
<TextBlock x:Name="textBlock1"/>
</Grid>
<Window.Resources>
<sys:String x:Key="str1">菩提本无树,明镜亦非台。</sys:String>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
</Grid.RowDefinitions>
<TextBlock x:Name="textBlock1"/>
</Grid>
<Window.Resources>
<sys:String x:Key="str1">菩提本无树,明镜亦非台。</sys:String>
</Window.Resources>
[csharp]
var res = this.FindResource("str1") as string;
this.textBlock1.SetBinding(TextBlock.TextProperty, new Binding(".") { Source = res });
var res = this.FindResource("str1") as string;
this.textBlock1.SetBinding(TextBlock.TextProperty, new Binding(".") { Source = res });
6.3.5 为Binding指定源(Source)的几种方法
把普通CLR类型单个对象指定为Source。如果类型实现了INotifyPropertyChanged接口,则可通过在属性的set语句里激发PropertyChanged事件来通知Binding数据已被更新。
把普通CLR集合类型对象指定为Source,一般是把控件的ItemsSource属性使用Binding关联到一个集合对象上。
把ADO.Net数据对象指定为Source。
使用XMLDataProvider把XML数据指定为Source。
把依赖对象Dependency Object指定为Source。
把容器的DataContext指定为Source。
通过ElementName指定Source(XAML里用的)。
通过Binding的RelativeSource属性相对地指定Source。
把ObjectDataProvider对象指定为Source。
把使用LINQ检索得到的数据对象作为Binding的源。
6.3.5 没有Source的Binding——使用DataContext作为Binding的源
当一个Binding只知道自己的Path而不知道自己的Source时,它会沿着UI元素树一路向树的根部找过去,每路过一个结点就要看看这个结点的DataContext是否具有Path所指定的属性。如果有,那就把这个对象作为自己的source;如果没有,那就继续找下去;如果到了树的根部还没有找到,那这个Binding就没有Source,因而也不会得到数据。
[html]
?<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition Height="5"/>
<RowDefinition Height="25"/>
<RowDefinition Height="5"/>
<RowDefinition Height="25"/>
</Grid.RowDefinitions>
<TextBox x:Name="textBox1" Grid.Row="0" BorderBrush="Black" Text="{Binding Path=Age}"/>
<TextBox x:Name="textBox2" Grid.Row="2" BorderBrush="Black" Text="{Binding Path=Id}"/>
<TextBox x:Name="textBox3" Grid.Row="4" BorderBrush="Black" Text="{Binding Path=Name}"/>
<Grid.DataContext>
<obj:Student Age="20" Id="100" Name="Anders"/>
</Grid.DataContext>
</Grid>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition Height="5"/>
<RowDefinition Height="25"/>
<RowDefinition Height="5"/>
<RowDefinition Height="25"/>
</Grid.RowDefinitions>
<TextBox x:Name="textBox1" Grid.Row="0" BorderBrush="Black" Text="{Binding Path=Age}"/>
<TextBox x:Name="textBox2" Grid.Row="2" BorderBrush="Black" Text="{Binding Path=Id}"/>
<TextBox x:Name="textBox3" Grid.Row="4" BorderBrush="Black" Text="{Binding Path=Name}"/>
<Grid.DataContext>
<obj:Student Age="20" Id="100" Name="Anders"/>
</Grid.DataContext>
</Grid>
当Binding的Source本身就是数据,不需要使用属性来暴露数据时,Binding的Path可以设置为“.”,亦可以省略不写。现在Source也可以省略不写了。
[html]
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
</Grid.RowDefinitions>
<TextBox x:Name="textBox1" Grid.Row="0
补充:Web开发 , ASP.Net ,