silverlight   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Silverlight实用窍门系列:47.Silverlight中元素到元素的绑定,以及ObservableCollection和List的使用区别大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

        问题一:在某一些情况下,我们使用MVVM模式的时候,对于某一个字段(AgeField)需要在前台的很多个控件(A、B、C、D、E)进行绑定,但是如何能够让我们后台字段名改变的时候能够非常方便的改变所有使用了这个字段的控件呢?         回答:使用Element to Element Binding,将AgeFiled绑定到A控件,然后再让B、C、D、E控件绑定A控件的使用Ag
@H_673_10@

        问题一在某一些情况下,我们使用MVVM模式的时候,对于某一个字段(AgeField)需要在前台的很多个控件(A、B、C、D、E)进行绑定,但是如何能够让我们后台字段名改变的时候能够非常方便的改变所有使用了这个字段的控件呢?

        回答:使用Element to Element Binding,将AgeFiled绑定到A控件,然后再让B、C、D、E控件绑定A控件的使用AgeField字段的属性

        例如:字段(AgeField)的数据是年龄大小,A、B、C、D、E控件分别是 Ellipse、Label、Slider、TextBox、ProgressBar,这些字段的Width、Value或者Text值按照常规的做法, 这几个控件都是在MVVM模式下都是绑定的AgeField。但是这个字段名在后期代码维护的时候修改为Age了,我们就不得不需要一一修改五个控件的绑 定值。如果这几个控件还分布在不同位置,那么寻找起来就将更加麻烦。那么这里我们就将使用到Silverlight 3的一个新特性Element to Element Binding。

        实例一:我们在这里一个TextBox控件tbAge,其Value值假定绑定到某一个字 段,然后我们再添加Slider、ProgressBar、Ellipse控件,使用Value="{Binding Text,ElementName=tbAge,Mode=TwoWay}"这样的方式将tbAge的Text值绑定到这几个控件上。下面我们看源码如 下:

 

 
 
  1. <!--这里是数据源--> 
  2. <TextBox x:Name="tbAge" text="30"  Width="80" Margin="0,87,183" Height="30" 
  3.          HorizontalAlignment="Left"  VerticalAlignment="Top"/> 
  4. <!--Silder控件绑定上面的tbAge控件的值--> 
  5. <Slider   Name="sdAge" Value="{Binding ELEMENTNAME=tbAge, Path=Text, Mode=TwoWay }" 
  6.           Minimum="1" Maximum="100" Height="40" Width="210" HorizontalAlignment="Left" 
  7.           VerticalAlignment="Top" Margin="0,145,115"></Slider> 
  8. <!--ProgressBar控件绑定上面的tbAge控件的值--> 
  9. <ProgressBar Value="{Binding text,Mode=TwoWay}" Margin="0,27,0" 
  10.              Name="progressBar1" Height="24" HorizontalAlignment="Left" 
  11.              VerticalAlignment="Top" Width="210" /> 
  12. <!--Ellipse的Width属性绑定sdAge控件的值--> 
  13. <Ellipse  Width="{Binding Value,ElementName=sdAge,Mode=TwoWay}"  
  14.           Height="100" HorizontalAlignment="Left" Margin="0,200,0"  
  15.           Name="ellipse1" stroke="Black" strokeThickness="1" VerticalAlignment="Top" /> 

        问题二:为什么在Silverlight中我们更常用ObservableCollection<T>来作为数据集合绑定到控件中,而不是使用List<T>呢?

        回答:当T继承于INotifyPropertyChanged接口的时候,如果T的属性值发 生变化时,ObservableCollection和List都能够让前台UI发生相应的改变。但是当增加一个T的数据行时,List不能及时更新前台 UI,而ObservableCollection能够将新增的T数据行马上更新到UI上去。

        实例二:我们拖出两个DataGrid控件分别是ShowListCity和ShowObservableCity,然后分别绑定数据List和Observable数据,再添加一个按钮为这两个数据集合添加集合值。看UI是否变化。下面我们看源码如下:

 

 
 
  1. <sdk:DataGrid HorizontalAlignment="Left"  AutoGeneratecolumns="false"  Margin="476,12,0" 
  2.                       Name="ShowListCity" VerticalAlignment="Top"  Height="169"  Width="324" > 
  3.             <sdk:DataGrid.columns> 
  4.                 <sdk:DataGridTextcolumn Header="省会" Binding="{Binding AddrNamE}" IsReadOnly="True" Width="108"/> 
  5.                 <sdk:DataGridTextcolumn Header="城市" Binding="{Binding CityNamE}" IsReadOnly="True" Width="108"/> 
  6.                 <sdk:DataGridTextcolumn Header="电话区号" Binding="{Binding TelNum}" IsReadOnly="True" Width="108"/> 
  7.             </sdk:DataGrid.columns> 
  8.         </sdk:DataGrid> 
  9.  
  10.         <sdk:DataGrid HorizontalAlignment="Left"  AutoGeneratecolumns="false"  Margin="476,187,0" 
  11.                       Name="ShowObservableCity" VerticalAlignment="Top"  Height="180"  Width="324" > 
  12.             <sdk:DataGrid.columns> 
  13.                 <sdk:DataGridTextcolumn Header="省会" Binding="{Binding AddrNamE}" IsReadOnly="True" Width="108"/> 
  14.                 <sdk:DataGridTextcolumn Header="城市" Binding="{Binding CityNamE}" IsReadOnly="True" Width="108"/> 
  15.                 <sdk:DataGridTextcolumn Header="电话区号" Binding="{Binding TelNum}" IsReadOnly="True" Width="108"/> 
  16.             </sdk:DataGrid.columns> 
  17.         </sdk:DataGrid> 
  18.         <Button Content="添加条目" Height="23" HorizontalAlignment="Left" Margin="364,13,0" Name="button1" 
  19.                 VerticalAlignment="Top" Width="75" Click="button1_Click" /> 

        下面是MainPage.xaml.cs代码

 

 
 
  1. public partial class MainPage : UserControl 
  2. { 
  3.     public MainPage() 
  4.     { 
  5.         InitializeComponent(); 
  6.         ListCity = new List<CityInformation>() 
  7.         { 
  8.             new CityInformation(){ AddrName="四川", CityName="成都", TelNum="028"}, 
  9.             new CityInformation(){ AddrName="北京", CityName="北京", TelNum="010"}, 
  10.             new CityInformation(){ AddrName="广东", CityName="广州", TelNum="021"
  11.         }; 
  12.         ObservableCity = new ObservableCollection<CityInformation>() 
  13.         { 
  14.             new CityInformation(){ AddrName="四川", TelNum="021"
  15.         }; 
  16.         this.ShowListCity.Itemssource = ListCity; 
  17.         this.ShowObservableCity.Itemssource = ObservableCity; 
  18.     } 
  19.  
  20.     private List<CityInformation> _ListCity; 
  21.     /// <sumMary
  22.     /// 城市集合 
  23.     /// </sumMary
  24.     public List<CityInformation> ListCity 
  25.     { 
  26.         get { return _ListCity; } 
  27.         set { _ListCity = value; } 
  28.     } 
  29.  
  30.     private ObservableCollection<CityInformation> _ObservableCity; 
  31.     /// <sumMary
  32.     /// 城市集合 
  33.     /// </sumMary
  34.     public ObservableCollection<CityInformation> ObservableCity 
  35.     { 
  36.         get { return _ObservableCity; } 
  37.         set { _ObservableCity = value; } 
  38.     } 
  39.     private void button1_Click(object sender, routedEventArgs E) 
  40.     { 
  41.         ListCity.Add(new CityInformation() { AddrName = "重庆", CityName = "重庆", TelNum = "022" }); 
  42.         ObservableCity.Add(new CityInformation() { AddrName = "重庆", TelNum = "022" }); 
  43.     } 

         下面我们来看CityInformation实例类代码如下:

 

 
 
  1. /// <sumMary>   
  2. /// 城市信息的实体类   
  3. /// </sumMary>   
  4. public class CityInformation 
  5. { 
  6.     private String _AddrName; 
  7.     private String _CityName; 
  8.     private String _TelNum; 
  9.     /// <sumMary
  10.     /// 地址名 
  11.     /// </sumMary
  12.     public String AddrName 
  13.     { 
  14.         get { return _AddrName; } 
  15.         set { _AddrName = value; } 
  16.     } 
  17.     /// <sumMary
  18.     /// 城市名 
  19.     /// </sumMary
  20.     public String CityName 
  21.     { 
  22.         get { return _CityName; } 
  23.         set { _CityName = value; } 
  24.     } 
  25.     /// <sumMary
  26.     /// 区号 
  27.     /// </sumMary
  28.     public String TelNum 
  29.     { 
  30.         get { return _TelNum; } 
  31.         set { _TelNum = value; } 
  32.     } 
  33. }  

          最后我们来看看运行效果如何,另外如需源码请点击 SLElement.zip 下载 .

Silverlight实用窍门系列:47.Silverlight中元素到元素的绑定,以及ObservableCollection和List的使用区别

Silverlight实用窍门系列:47.Silverlight中元素到元素的绑定,以及ObservableCollection和List的使用区别

大佬总结

以上是大佬教程为你收集整理的Silverlight实用窍门系列:47.Silverlight中元素到元素的绑定,以及ObservableCollection和List的使用区别全部内容,希望文章能够帮你解决Silverlight实用窍门系列:47.Silverlight中元素到元素的绑定,以及ObservableCollection和List的使用区别所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。