两个重要的接口:INotifyPropertychanged和IValueConverter

来源:互联网 发布:js ajax获取json数据 编辑:程序博客网 时间:2024/04/29 15:44
今天学习了一个重要的接口INotifyPropertychanged,用于向客户端(通常是执行绑定的客户端)发出某一属性值已更改的通知。
若要在将客户端与数据源进行绑定时发出更改通知,则绑定类型应具有下列任一功能:
1.INotifyPropertyChanged interface (preferred)." xml:space="preserve">实现 INotifyPropertyChanged 接口(首选)。
2.为绑定类型的每个属性提供更改事件。
例如,在我正在做的一个连连看应用中,在LLKBlock类引用这样一个接口:
 
public class LLKBlock:INotifyPropertyChanged    {        private void FirePropertyChanged(string propertyName)        {            if (PropertyChanged != null)            {                PropertyChanged                    (this, new PropertyChangedEventArgs(propertyName));            }        }        public event PropertyChangedEventHandler PropertyChanged;        private int x;        private int y;        public int Y        {            get { return y; }            set { y = value; FirePropertyChanged("Y"); }        }        public int X        {            get { return x; }            set { x = value; FirePropertyChanged("X"); }                   }        private bool isAlive;        public bool IsAlive        {            get { return isAlive; }            set { isAlive = value; FirePropertyChanged("IsAlive"); }        }        private int picValue;        public int PicValue        {            get { return picValue; }            set { picValue = value; FirePropertyChanged("PicValue"); }        }            }


LLKBlock类中当属性值发生改变时,会像绑定的对象发送一个通知,使绑定值及时更改,这是一个很常用的接口……


另一个重要的接口IValueConverter:

定义:IValueConverter interface and then implement the Convert and ConvertBack methods." xml:space="preserve" style="font-family: 'Segoe UI', Helvetica, Garuda, Arial, sans-serif; line-height: 21px; background-color: rgb(255, 255, 255);">如果要将值转换器与绑定关联,请创建一个实现 IValueConverter 接口的类,然后实现 Convert 和ConvertBack 方法。转换器可以将数据从一种类型更改为另一种类型,根据区域性信息转换数据,或修改表示形式的其他方面。
注意值转换器类的命名方法:通常是将要转换的值在Model中的类型名称作为开头单词,再接上UI中的类型名称,再加上ValueConverter;例如,要定义一个bool类型到visibility类型的类型转换,可以定义类名为:BoolVisibilityValueConverter
接口用法举例:

public class BoolVisibilityValueConverter:IValueConverter    {        public object Convert(object value, Type targetType, object parameter, string language)        {            bool boolType = (bool)value;            if (boolType == true)            {                return Visibility.Visible;            }            else return Visibility.Collapsed;        }        public object ConvertBack(object value, Type targetType, object parameter, string language)        {            throw new NotImplementedException();        }    }



上例中,为了定义一个bool到visibility的类型转换,我们构建了如上的类来实现。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 国美买的格力空调发票丢了怎么办 国美实体店发票丢了怎么办 我在苏宁买的冰箱发票丢了怎么办 信用卡家庭电单位电话换了怎么办 常住户囗和实际住址没房子怎么办 退货淘宝极速退款 卖家拒收怎么办 淘宝退货极速退款后卖家拒收怎么办 蘑菇街付款成功怎么申请退款怎么办 淘宝上拍错地址联系卖家不管怎么办 收到货想退款卖家不同意怎么办 小米小店复合通过qq群怎么办 买了火车票在订单上查不到怎么办 用支付宝付款扣款没成功怎么办 在京东买东西只收到空盒子怎么办 魅族移动数据是灰色的怎么办? 魅族手机账号密码忘记了怎么办视频 淘宝购物退货把单号写错了怎么办 天猫想退货商家不给退货地址怎么办 天天爱消除四星宠物等级已满怎么办 店不干了店里面的财神怎么办 微信显示登陆注册语言打不开怎么办 三星手机解锁以后突然不量怎么办 耐克、阿迪品牌鉴定买到假货怎么办 小米4c盒子不支持有线连接怎么办 一个手机号绑着两个小米账号怎么办 小米5s手机听筒声音小怎么办 淘宝上买手机买到翻新怎么办 小米6用久了很卡怎么办 淘宝商家发错误的退货地址怎么办 买苹果手机时查到了翻新机该怎么办 荣耀9青春版玩王者卡怎么办 红米4x手机声音突然成破音怎么办 红米pro玩王者荣耀卡怎么办 红米手机恢复出厂设置出错了怎么办 红米恢复出厂设置出错了怎么办 应聘工作上当收押金了该怎么办 红米1s密码忘了怎么办 红米1s刷机后开不了机怎么办 红米2a耗电超快怎么办 红米2a手机耗电快怎么办 红米4x触屏失灵怎么办