Silverlight数据绑定
来源:广州中睿信息技术有限公司官网
发布时间:2012/10/21 23:25:16 编辑:itlead 阅读 1576
绑定引擎从Binding对象获取以下方面的信息:目标UI属性,用于显示数据,并且可能允许用户对数据进行更改。目标可以是FrameworkElement的任一DependencyProperty。在S
  绑定引擎从 Binding 对象获取以下方面的信息:
  
  目标 UI 属性,用于显示数据,并且可能允许用户对数据进行更改。目标可以是 FrameworkElement 的任一 DependencyProperty。在 Silverlight 4 中,在以下情况下目标还可以是 DependencyObject 的 DependencyProperty:
  
  DependencyObject 是 FrameworkElement 的某个属性的值。
  
  DependencyObject 在一个作为 FrameworkElement 属性的值的集合中(例如,Resources 属性)。
  
  DependencyObject 在 DependencyObjectCollection<(Of <(<'T>)>)> 中。
  
  包含在源和目标之间流动的数据的源对象。源可以是任何 CLR 对象,包括目标元素本身或者其他 UI 元素。如果目标处于某一数据模板中,则源可以是该模板应用于的 UI 元素。
  
  数据流的方向。该方向是通过设置 Binding 对象的 Mode 属性指定的。
  
  可选值转换器,适用于所传递的数据。值转换器是一个实现 IValueConverter 的类。
  
  例如,可以将 TextBox 的 Foreground 属性绑定到 SolidColorBrush,以便文本的颜色可以基于数据发生变化。在此方案中,Foreground 属性为绑定目标,而 SolidColorBrush 对象为绑定源。
  
  下面的示例演示如何使用代码和 XAML 将 TextBox 的 Foreground 颜色绑定到 SolidColorBrush。绑定源是 MyColors 类的属性
  
  页面代码:
  
  
  后台代码:
  
  
  说明:
  该绑定是在 XAML 中使用 {Binding ...} 语法创建的。绑定源是通过在代码中为 TextBox 设置 DataContext 属性而设置的。
  
  数据上下文是可继承的。如果对父元素设置了数据上下文,则其所有子元素都将使用这一数据上下文。子元素可以通过以下方式来重写此行为:对其绑定对象设置 Source 属性或者设置其 DataContext(之后将应用于其所有子级)。
  
  如果希望拥有多个绑定且所有这些绑定使用同一个源,则设置数据上下文会很有用。若要设置单个绑定的源,请对 Binding 对象设置 Source 属性。
  
  还可以使用 ElementName 属性或 RelativeSource 属性指定绑定源。当绑定到应用程序中的其他元素时(例如在使用滑块调整按钮的宽度时),ElementName 属性是很有用的。当在 ControlTemplate 或 Style 中指定绑定时,RelativeSource 属性是很有用的。
  
  您可以通过设置 Binding..::..Path 属性,绑定到源对象的某一属性。Path 属性支持用于绑定到嵌套属性、附加属性、字符串索引器的多种语法选项。
  
  总之,上述示例使绑定引擎创建一个绑定(默认为 OneWay),将 TextBox 的 Foreground 属性连接到 TextColor 对象的 brush1 属性。
  
  数据流的方向:
  每个绑定都有一个 Mode 属性,该属性决定数据流动的方式和时间。Silverlight 支持以下三种类型的绑定:
  
  创建 OneTime 绑定时,该绑定使用源数据更新目标。
  
  创建 OneWay 绑定时以及每当源数据发生变化时,该绑定使用源数据更新目标。这是默认模式。
  
  当目标和源有一个发生变化时,TwoWay 绑定既更新目标也更新源。或者,您可以禁用自动源更新,只在您选择的时间对源进行更新。
  
  为了能够发生自动目标更新,源对象必须实现 INotifyPropertyChanged 接口,如下一部分所述。
  
  更改通知:
  为了使源对象的更改能够传播到目标,源必须实现 INotifyPropertyChanged 接口。INotifyPropertyChanged 具有 PropertyChanged 事件,该事件通知绑定引擎源已更改,以便绑定引擎可以更新目标值。
  
  在下面的示例中,MyColors 类为 OneWay 绑定实现 INotifyPropertyChanged 接口。
  
   
  若要获取绑定到 ItemsControl 的集合的更改通知,除了实现 INotifyPropertyChanged 外,还要实现 INotifyCollectionChanged。如果实现 INotifyCollectionChanged,对集合的更改(例如添加或移除对象)将传播到目标。若要获取集合中对象的属性更改通知,这些对象必须实现 INotifyPropertyChanged。
  
  在实现您自己的集合之前,应考虑使用 ObservableCollection<(Of <(<'T>)>)> 类,该类具有 INotifyCollectionChanged 和 INotifyPropertyChanged 的内置实现。
  
  更新数据源:
  在 TwoWay 绑定中,对目标的更改会自动更新源,但绑定到 TextBox 的 Text 属性时除外。这种情况下,更新仅在 TextBox 失去焦点时发生。
  
  您可以禁用自动源更新,只在您选择的时间对源进行更新。例如,您可以这样做,以便在更新绑定数据源之前验证来自多个控件的用户输入。
  
  若要禁用自动源更新,请将 UpdateSourceTrigger 属性设置为 Explicit。此设置影响使用相同 Binding 对象的所有绑定(例如,在使用继承的数据上下文时)。但是,您必须为每个绑定单独更新源。若要更新某一绑定,请首先调用目标元素的 FrameworkElement..::..GetBindingExpression 方法,并且传递到目标 DependencyProperty 中。然后,可以使用返回值调用 BindingExpression..::..UpdateSource 方法。下面的示例代码演示了此过程。
  
  页面代码:
   
  
  后台代码:
   
 
 
 
本站技术原创栏目文章均为中睿原创或编译,转载请注明:文章来自中睿,本站保留追究责任的权利。
 
 
  
联系我们CONTACT 扫一扫
愿景:成为最专业的软件研发服务领航者
中睿信息技术有限公司 广州•深圳 Tel:020-38931912 务实 Pragmatic
广州:广州市天河区翰景路1号金星大厦18层中睿信息 Fax:020-38931912 专业 Professional
深圳:深圳市福田区车公庙有色金属大厦509~510 Tel:0755-25855012 诚信 Integrity
所有权声明:PMI, PMP, Project Management Professional, PMI-ACP, PMI-PBA和PMBOK是项目管理协会(Project Management Institute, Inc.)的注册标志。
版权所有:广州中睿信息技术有限公司 粤ICP备13082838号-2