从WPF的AttachProperty到Sliverlight3中的Behavior

从WPF的AttachProperty到Sliverlight3中的Behavior

ID:38760390

大小:25.38 KB

页数:7页

时间:2019-06-19

从WPF的AttachProperty到Sliverlight3中的Behavior_第1页
从WPF的AttachProperty到Sliverlight3中的Behavior_第2页
从WPF的AttachProperty到Sliverlight3中的Behavior_第3页
从WPF的AttachProperty到Sliverlight3中的Behavior_第4页
从WPF的AttachProperty到Sliverlight3中的Behavior_第5页
资源描述:

《从WPF的AttachProperty到Sliverlight3中的Behavior》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、从WPF的AttachProperty到Sliverlight3中的Behavior                           周银辉    说来很巧,最早接触到Behavior模式不是在Sliverlight中,而是我们在使用“Prism+MVVM”试图将界面和后台逻辑尽可能脱耦时,那时我们发现虽然WPF的Command、Prism的DelegateCommand能很好地帮助我们脱耦,但WPF的Command数量太少(比如Button的Command对应的是Click事件,但如果我需要在Loaded时也使用Command,其就无能为力

2、了),于是我们用到了一个称为Behavior的模式来协助我们解决,不过当时我们总习惯哈哈大笑,因为我们认为这是一个很龌龊的技巧。如果还要向前追溯的话,那就得到很久以前了,当时我发现WPF拥有一个能力是将某个属性“附加(Attach)”到某个对象上,也就是AttachProperty,那么我们能否用相同的原理将某个功能也附加到某个的对象上呢?可以的,这就是AttachedBehavior,在当时我一直觉得这仅仅是一个小技巧,因为我从来只用它来为同事的代码增加功能或修改Bug,同事在用我写的功能函数时,感觉是在给对象打插件,非常方便。前几天,听说MS

3、将其纳入到Sliverlight3中了,颇感惊异。 1,从Attach属性开始  在继续阅读之前,建议下载Demo程序,并先看看源代码                     

4、2" Content="I'm btn 2"                 loc:InfoService.Info="hehehe, I'm btn 2"                  Click="ShowInfo"/>     从上面的代码看,你是不是可以猜到loc:InfoService.Info是一个AttachProperty,我们将一个字符串Attach到了一个Button控件上。恩,你的猜想是可行的,也是一般做法,但这里我们并不想这么做,看看我是怎么做的:   public static class

5、 InfoService    {        private static Hashtable infoCache = new Hashtable();        public static void SetInfo(Object obj, Object info)        {            if (infoCache.Contains(obj))            {                infoCache[obj] = info;            }            else          

6、  {                infoCache.Add(obj, info);            }        }             public static Object GetInfo(Object obj)        {            if (infoCache.Contains(obj))            {                Console.WriteLine("get value from custom cache");                return infoCac

7、he[obj];            }            return null;        }                              }注意到了吗?InfoService并不包含任何AttachProperty,甚至Info属性都没有。能编译通过吗?不仅能编译,而且能很好地工作。为什么?我不能说这是技巧,我只能说这是MS的Xaml解析器玩的花招。当Xaml解析器发现myNamespace:MyClass.MyAttachProperty时,其并不会真正的去查找和调用MyClass. MyAttachPropert

8、y属性,而是会去看MyClass类中是否存在SetMyAttachProperty(arg1,arg2)方法,如果存在则将被Attach

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。