博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Silverlight实用窍门系列:47.Silverlight中元素到元素的绑定,以及ObservableCollection和List的使用区别...
阅读量:5749 次
发布时间:2019-06-18

本文共 3719 字,大约阅读时间需要 12 分钟。

 问题一:在某一些情况下,我们使用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值绑定到这几个控件上。下面我们看源码如下:

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

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

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

      下面是MainPage.xaml.cs代码
public partial class MainPage : UserControl    {        public MainPage()        {            InitializeComponent();            ListCity = new List
() { new CityInformation(){ AddrName="四川", CityName="成都", TelNum="028"}, new CityInformation(){ AddrName="北京", CityName="北京", TelNum="010"}, new CityInformation(){ AddrName="广东", CityName="广州", TelNum="021"} }; ObservableCity = new ObservableCollection
() { new CityInformation(){ AddrName="四川", CityName="成都", TelNum="028"}, new CityInformation(){ AddrName="北京", CityName="北京", TelNum="010"}, new CityInformation(){ AddrName="广东", CityName="广州", TelNum="021"} }; this.ShowListCity.ItemsSource = ListCity; this.ShowObservableCity.ItemsSource = ObservableCity; } private List
_ListCity; ///
/// 城市集合 /// public List
ListCity { get { return _ListCity; } set { _ListCity = value; } } private ObservableCollection
_ObservableCity; ///
/// 城市集合 /// public ObservableCollection
ObservableCity { get { return _ObservableCity; } set { _ObservableCity = value; } } private void button1_Click(object sender, RoutedEventArgs e) { ListCity.Add(new CityInformation() { AddrName = "重庆", CityName = "重庆", TelNum = "022" }); ObservableCity.Add(new CityInformation() { AddrName = "重庆", CityName = "重庆", TelNum = "022" }); } }
   下面我们来看CityInformation实例类代码如下:
///       /// 城市信息的实体类      ///       public class CityInformation    {        private string _AddrName;        private string _CityName;        private string _TelNum;        ///         /// 地址名        ///         public string AddrName        {            get { return _AddrName; }            set { _AddrName = value; }        }        ///         /// 城市名        ///         public string CityName        {            get { return _CityName; }            set { _CityName = value; }        }        ///         /// 区号        ///         public string TelNum        {            get { return _TelNum; }            set { _TelNum = value; }        }    }

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

 

转载地址:http://zfrzx.baihongyu.com/

你可能感兴趣的文章
汉字转阿斯克马值
查看>>
Java 栈与堆简介
查看>>
c#.net利用RNGCryptoServiceProvider产生任意范围强随机数的办法
查看>>
转换成数值的三种方法
查看>>
【supervisord】部署单进程服务的利器
查看>>
django 不同版本 url 及path区别
查看>>
字节序问题
查看>>
zabbix oracle监控插件orabbix部署安装
查看>>
mysql基础命令
查看>>
IIS网站本机可以访问但局域网其他机器无法访问 解决方法
查看>>
hdu1024 dp+滚动数组
查看>>
python3 通过qq 服务器 发送邮件
查看>>
java 多线程踩过的坑
查看>>
性能优化
查看>>
ggplot2 geom相关设置—点重合处理(jitter)
查看>>
Java堆栈解析
查看>>
部署Replica Sets及查看相关配置
查看>>
倒序显示数组(从右往左)
查看>>
STL学习笔记-- queue
查看>>
关于unity rect的坑
查看>>