zoukankan      html  css  js  c++  java
  • SilverlightCaliburn应用框架5

             Silverlight-Caliburn应用框架1

             Silverlight-Caliburn应用框架2

             Silverlight-Caliburn应用框架3

             Silverlight-Caliburn应用框架4 

             Silverlight-Caliburn应用框架5

             Silverlight-Caliburn应用框架6

         这篇主要了解一下Caliburn中的Command特性。

         在前面已经提到Caliburn的Command提供了基本的命令模式的实现,Sl3之前版本不支持Command属性,通过Caliburn框架可以很简单的解决这个问题

    Command是在前面所讲的Action基础上实现的,所以它继承了Action的所有特点,即我们所提到的包括输入参数,过滤器,异步执行等等。

        下面我们仍然在前面例子的基础上进行修改,看看Silverlight中是如何使用Cailburn中的Command特性的。

                                      捕获

        首先我们将之前的Action代码修改一下,ExtractCommand.cs中代码:

             public class ShowExtractCommand
    
        {
    
            public double Execute(double param)
    
            {
    
                return Math.Sqrt(param);
    
            }
    
            public bool CanExecute(double param)
    
            {
    
                return param >= 0;
    
            }
    
        }

         你已经看到了,这个就是我们接下来使用的Command,Cailburn框架中声明的Command须具有一个Execute方法,当然这并不是绝对的,

    你也可以Command特性修饰一个类,并指明访问一个方法。关于过滤器的部分则和Action一样,若是遵循CanExecute的命名方式,

    则会自动的应用在相应的方法上,你若是不熟悉,可以回过头看看Action部分的说明。

        现在我们修改UI,这里我们首先引入相关命名空间

            <xmlns:local="clr-namespace:Commands"
    
            xmlns:ca="clr-namespace:Caliburn.PresentationFramework.Commands;assembly=Caliburn.PresentationFramework" 
    
            xmlns:pf="clr-namespace:Caliburn.PresentationFramework;assembly=Caliburn.PresentationFramework" 
    
            xmlns:ct="clr-namespace:Caliburn.PresentationFramework.Triggers;assembly=Caliburn.PresentationFramework" 
    
            xmlns:dataInput="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.Input"/>

         注意这里的ca所引用的命名空间是Caliburn框架中的Commands ,接下来,我们的UI只是在原来的基础上将Action的使用改变为Command的使用

            <TextBox Name="txtInput"  />
    
            <TextBox Name="txtResult" />
    
            <Button Content="计算"  Name="button1">
    
                <pf:Message.Triggers>
    
                    <pf:RoutedMessageTriggerCollection>
    
                        <ct:EventMessageTrigger EventName="Click">
    
                            <ct:EventMessageTrigger.Message>
    
                                <ca:CommandMessage  Command="ShowExtractCommand" OutcomePath="txtResult.Text">
    
                                    <pf:Parameter ElementName="txtInput" Path="Text"></pf:Parameter>
    
                                </ca:CommandMessage>
    
                            </ct:EventMessageTrigger.Message>
    
                        </ct:EventMessageTrigger>
    
                    </pf:RoutedMessageTriggerCollection>
    
                </pf:Message.Triggers>
    
             </Button>

         如果你注意和前面Action的比较,你会发现两者只有一些小小的改动,我们只是将ActionMessage替换成了CommandMessage,

    例子中Command被设置为ShowExtractCommand的一个实例。

        那么最后一步,我们配置这个Command:

             private void Application_Startup(object sender, StartupEventArgs e)
    
            {
    
                var container = new SimpleContainer();
    
                CaliburnFramework.ConfigureCore(container).WithPresentationFramework().Start();
    
                container.RegisterSingleton<ShowExtractCommand>("ShowExtractCommand");
    
                this.RootVisual = new MainPage();
    
            }

        这里配置写在Application_Startup事件中,如果你忘了配置这个Command,运行时会报出AG_E_PARSER_BAD_PROPERTY_VALUE 这样的错误。

    因为这里使用了默认的SimpleContainer容器,最后可以通过类型的名称向容器外暴露这个类型,所以我们在上面的XAML代码中可以通过将Command属

    性值设为ShowExtractCommand获取对应的实例。

         到这个时候,我们已经完整的展现了一个最简单的使用Command特性的例子,那么问题是Command有没有和Action类似的简写方式呢,答案是有的。

    我们将上面的Button的XAML代码修改一下:

             <Button  Name="button2" pf:Message.Attach="ContainerCommand ShowExtractCommand(txtInput.Text):txtResult.Text"/>

         前面我们提到Command属性值是一个命令类的实例,那么通常情况下,这个类可以在依赖注入容器中,也可以在数据绑定和资源中,那么采用上面的方式

    是因为我们通过在依赖注入容器中获取到这个实例的,所以在Attach属性中指明了ContainerCommand,那么我们也可以在资源中获取这个实例

         首先在UI中声明这个资源

            <UserControl.Resources>
    
            <local:ShowExtractCommand x:Key="showExtract"></local:ShowExtractCommand>
    
            </UserControl.Resources>

        接着我们修改Button获取这个资源的实例:

            <Button  pf:Message.Attach="ResourceCommand showExtract(txtInput.Text):txtResult.Text"/>
    
      Command属性值可以被设置为一个字符串并通过key在容器中获取对应的实例,这里我们即在页面中声明了Key为showExtract的资源,在这种方式下,
    我们就不需要再在App.xaml.cs中对Command命令进行注册。
       好了,这篇就对Caliburn中的Command特性做了一个简单但较为整体的介绍,下篇再来探讨一下Caliburn中命令的其它使用。

      代码下载:BasicCommandInCaliburn    VS2010 +SL3

  • 相关阅读:
    three.js详解
    Javascript的原型
    Transform? Transition? Animation?
    Backbone源码分析Backbone架构+流程图
    对象是引用的注意原型中的属性改变
    MySQL+ JSP+Tomcat開發指引
    MySQL應用分析
    SQL 日期
    MySQL安裝
    MSE错误应对分享
  • 原文地址:https://www.cnblogs.com/626498301/p/1814437.html
Copyright © 2011-2022 走看看