• Silverlight之Command与Behavior


    在家没有事,说说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>

  • 相关阅读:
    Network (poj1144)
    C. Hongcow Builds A Nation
    ZYB loves Xor I(hud5269)
    D. Chloe and pleasant prizes
    Game(hdu5218)
    约瑟夫环的递推方法
    Misaki's Kiss again(hdu5175)
    Exploration(hdu5222)
    B. Arpa's weak amphitheater and Mehrdad's valuable Hoses
    C. Arpa's loud Owf and Mehrdad's evil plan
  • 原文地址:https://www.cnblogs.com/bocoimg/p/3222839.html
Copyright © 2020-2023  润新知