博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
silverlight Command与behavior如何使用?
阅读量:5097 次
发布时间:2019-06-13

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

  在家没有事,说说command与behavior使用吧,这是我个人的看法,如果不赞同,可以ignore!

   最开始遇见command是项目经理让我研究MVVM设计模式过程中出现的,为了实现UI元素也UI界面逻辑分离项目组决定使用MVVM设计模式。把界面逻辑写在ViewModel层,View层由美工设计,通过绑定VM层的数据,实现分离。可是问题出来了,UI元素如何触发VM层的事件呢?

  通过查资料,最开始很多人建议使用command命令,因为silverlight/wpf的很多控件都提供了Command属性。研究两天感觉还挺好使,只需要绑定VM层的ICommand属性就可以了。可是后来问题越来越复杂,主要出来以下几方面的问题:

  (1)只有ButtonBase提供了Command属性。其他没有继承这个基类的元素不提供此接口。

  (2)UI元素事件一般会有很多,比如左击、右击等。

  (3)UI元素可能在初始化时就会需要一些操作,比如Load事件。

  开始我们使用Prism提供的DelegateCommand和CompositeCommand类来处理,可是对于左、右击这种情况很棘手,重写ICommand,那么多UI元素想累死啊,百度,google(像这样新技术,百度很少,还是google好用,记得输english)很久终于在微软express blend中找到答案。使用behavior,一切搞定。

  behavior提供CallMethodAction、ChangePropertyAction、DataStateBehavior等十三个行为,足够你处理一般事件调用情况了。比如CallMethodAction:提供EventName、MethodName两个属性,EventName:你可以选择任意元素事件,MethodName:可以让你直接绑定方法,基本上可以解决所有问题吧,嘿嘿。。。。

  使用也很简单,只需要在Blend中把相关行为Behavior拖放到控件上,然后设置相关属性,一切OK!

  注:有一点得记住啦,如果你使用MVVM,记得设置TargetObject属性啊,下面是我使用的一段代码:

    <Image x:Name="image" HorizontalAlignment="Left" Height="77" Margin="44,49,0,0"     VerticalAlignment="Top" Width="110" Source="2.jpg" RenderTransformOrigin="0.5,0.5">

     <i:Interaction.Triggers>
       <i:EventTrigger EventName="Loaded">
         <ei:CallMethodAction MethodName="MethodA" TargetObject="{Binding}"/>
      </i:EventTrigger>
     </i:Interaction.Triggers>
    </Image>

转载于:https://www.cnblogs.com/xiaominblog/archive/2010/09/23/1833418.html

你可能感兴趣的文章
mysql基础语句
查看>>
Oracle中的rownum不能使用大于>的问题
查看>>
[Data Structure & Algorithm] 有向无环图的拓扑排序及关键路径
查看>>
cassandra vs mongo (1)存储引擎
查看>>
Visual Studio基于CMake配置opencv1.0.0、opencv2.2
查看>>
Vue音乐项目笔记(三)
查看>>
遍历Map对象
查看>>
计算剪贴板里仿制的代码行数
查看>>
MySQL索引背后的数据结构及算法原理
查看>>
#Leetcode# 209. Minimum Size Subarray Sum
查看>>
SDN第四次作业
查看>>
DM8168 DVRRDK软件框架研究
查看>>
django迁移数据库错误
查看>>
yii 跳转页面
查看>>
洛谷 1449——后缀表达式(线性数据结构)
查看>>
[最小割][Kruskal] Luogu P5039 最小生成树
查看>>
Data truncation: Out of range value for column 'Quality' at row 1
查看>>
Dirichlet分布深入理解
查看>>
(转)Android之发送短信的两种方式
查看>>
python第九天课程:遇到了金角大王
查看>>