silverlight绑定总结

来源:互联网 发布:java 终止当前线程 编辑:程序博客网 时间:2024/04/29 05:28

两种大类:

普通绑定,数据源通过datacontext指定。并且会对上级控件搜索数据源

datagrid等list类型绑定,数据源通过itemSource指定。

常见的使用Binding的代码:
C#

Binding binding = new Binding();// Set source objectbinding.Source = treeView;// Set source propertybinding.Path = new PropertyPath("SelectedItem.Header");// Attach to target propertycurrentFolder.SetBinding(TextBlock.TextProperty, binding);

XAML:

<TextBlock x:Name=”currentFolderDockPanel.Dock=”TopText=”{Binding ElementName=treeView, Path=SelectedItem.Header}Background=”AliceBlueFontSize=16/>

 

(1)普通文本等绑定:

<TextBox x:Name="txtProductName"  Grid.Column="1" Margin="25,35,43,58" TextWrapping="Wrap" 

Text="{Binding ProductName}"/>

代码:

Product product = new Product()
                    {
                         ProductName="Audi",
                         ProductPrice=50000.0
                    };
txtProductName.DataContext = product;

 

(2)绑定的延生属性特点:

   //  声明 public static IList<Graphic> features撤退路线;Grphic实际是一个表的行,有多个featrue.Attributes["NAME"]                  

                        tip.canvas.DataContext =MapClient.FeatureClass.features防汛人员[0];

<sdk:Label  Content="{Binding Attributes[NAME]}" RenderTransformOrigin="0.128,0.381" Foreground="#FFFF2900" Margin="68,11,3,0"/>

 

(3) 控件元素绑定:绑定的实质是对类的操作。所以对于控件的属性,也可以绑定

//通过 ElementName指定控件名

//通过Path指定控件的具体属性值

 <esri:TimeSlider x:Name="MyTimeSlider" 

                        Loop="True" PlaySpeed="0:0:0.15"

                        TimeMode="TimeExtent"                 

                        MinimumValue="{Binding ElementName=MyMap, Path=Layers[MyHurricaneFeatureLayer].TimeExtent.Start, Mode=OneWay}"

                        MaximumValue="{Binding ElementName=MyMap, Path=Layers[MyHurricaneFeatureLayer].TimeExtent.End, Mode=OneWay}"                                

                        Value="2000/08/04 01:00:00 UTC,2000/08/07 01:00:00 UTC"

                        Height="20" />

(4)gridview 等list绑定:
            grid2.CTLXDataGrid.ItemsSource =FeatureClass.features防汛人员;
            <localGrid:AutoFillDataGrid  x:Name="DataGrid1" AutoGenerateColumns="False" HeadersVisibility="All" Background="White" >
                <localGrid:AutoFillDataGrid.Columns>
                     <data:DataGridTextColumn Binding="{Binding Attributes[路线名称]}" Header="路线名称" />
                    <data:DataGridTextColumn Binding="{Binding Attributes[转移时间]}" Header="转移时间" />
                    <data:DataGridTextColumn Binding="{Binding Attributes[长度路线]}" Header="路线长度(公里)"/>
ata:DataGridTextColumn Binding="{Binding Attributes[撤退目标安全转移区]}" Header="撤退目标安全转移区"/>
                </localGrid:AutoFillDataGrid.Columns>
                </localGrid:AutoFillDataGrid.Columns>
            </localGrid:AutoFillDataGrid>
注:Text=”{Binding 路线名称}” 等效于 Text=”{Binding Path=路线名称}”。
 (5)数据源的分类:
有三个属性用来设置源:ElementName(string)、Source(Object) 和 RelativeSource(RelativeSource)。注:这三个只能指定一个,否则异常。
ElementName: 源为一个元素(Element),这里用的是此元素中设置的Name属性。
Source:以object作为源。<TextBlock Text="{Binding Source={StaticResource myDataSource}, Path=PersonName}"/>
RelativeSource: 源相对于绑定目标的位置。
(6)绑定模式:

Binding.Mode 指示源和目标间数据流的方向。

OneWay 源更新时,目标也更新
TwoWay 源更新时目标也更新,或者目标更新时同时更新源
OneTime 仅当应用程序启动时或 DataContext 进行更改时更新目标属性。绑一次就不更维护更新,目标相当于源的一次性镜像
OneWayToSource 目标更新时更新源,和OneWay相反

大部分WPF自带的控件的dependency property默认的是OneWay,像TextBox.Text默认的是TwoWay。
值得注意的事,只读属性只能设置成OneWay,不能是TwoWay,否则运行时异常。

原创粉丝点击