从WPF的AttachProperty到Sliverlight3中的Behavior.docxVIP

从WPF的AttachProperty到Sliverlight3中的Behavior.docx

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
从WPF的AttachProperty到Sliverlight3中的Behavior

? ??从WPF的AttachProperty到Sliverlight3中的Behavior?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 周银辉??  说来很巧,最早接触到Behavior模式不是在Sliverlight中,而是我们在使用“Prism+MVVM”试图将界面和后台逻辑尽可能脱耦时,那时我们发现虽然WPF的Command、Prism的DelegateCommand能很好地帮助我们脱耦,但WPF的Command数量太少(比如Button的Command对应的是Click事件,但如果我需要在Loaded时也使用Command,其就无能为力了),于是我们用到了一个称为Behavior的模式来协助我们解决,不过当时我们总习惯哈哈大笑,因为我们认为这是一个很龌龊的技巧。如果还要向前追溯的话,那就得到很久以前了,当时我发现WPF拥有一个能力是将某个属性“附加(Attach)”到某个对象上,也就是Attach Property,那么我们能否用相同的原理将某个功能也附加到某个的对象上呢?可以的,这就是Attached Behavior,在当时我一直觉得这仅仅是一个小技巧,因为我从来只用它来为同事的代码增加功能或修改Bug,同事在用我写的功能函数时,感觉是在给对象打插件,非常方便。前几天,听说MS将其纳入到Sliverlight3中了,颇感惊异。?1,从Attach属性开始??在继续阅读之前,建议下载Demo程序,并先看看源代码?????StackPanel?Orientation=Vertical????????Button?x:Name=btn1?Content=Im?btn?1?????????????????loc:InfoService.Info=hahaha,?Im?btn?1??????????????????Click=ShowInfo/????????Button?x:Name=btn2?Content=Im?btn?2?????????????????loc:InfoService.Info=hehehe,?Im?btn?2??????????????????Click=ShowInfo/????/StackPanel?从上面的代码看,你是不是可以猜到loc:InfoService.Info是一个AttachProperty,我们将一个字符串Attach到了一个Button控件上。恩,你的猜想是可行的,也是一般做法,但这里我们并不想这么做,看看我是怎么做的:?? ?public?static?class?InfoService????{????????private?static?Hashtable?infoCache?=?new?Hashtable();????????public?static?void?SetInfo(Object?obj,?Object?info)????????{????????????if?(infoCache.Contains(obj))????????????{????????????????infoCache[obj]?=?info;????????????}????????????else????????????{????????????????infoCache.Add(obj,?info);????????????}????????}?????????????public?static?Object?GetInfo(Object?obj)????????{????????????if?(infoCache.Contains(obj))????????????{????????????????Console.WriteLine(get?value?from?custom?cache);????????????????return?infoCache[obj];????????????}????????????return?null;????????}??????????????????????????????}注意到了吗?InfoService并不包含任何AttachProperty,甚至Info属性都没有。能编译通过吗?不仅能编译,而且能很好地工作。为什么?我不能说这是技巧,我只能说这是MS的Xaml解析器玩的花招。当Xaml解析器发现myNamespace:MyClass.MyAttachProperty时,其并不会真正的去查找和调用MyClass.?MyAttachProperty属性,而是会去看MyClass类中是否存在SetMyAttachProperty(arg1, arg2)方法,如果存在则将被Atta

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档