当前位置:编程学习 > asp >>

深入浅出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 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,