关于WF4SDK中的ExpressionTextBox例子的两个问题

简介:

ExpressionTextBox是WF4中新提供的表达式编辑器,关于它的介绍可以看这篇文章 http://www.cnblogs.com/carysun/archive/2009/11/13/wf4-ExpressionTextBox.html,在SDK也有相关的Demo,但是SDK中的 ExpressionTextBox 例子,有两个问题

1.该例子中的MultiAssign活动如果你直接在工作流中使用,会报运行时错误。原代码如下:

namespace Microsoft.Samples.ExpressionTextBoxSample

{

    // Sets To1 = Value1 and To2 = Value2

    [Designer(typeof(MultiAssignDesigner))]

    public sealed class MultiAssign : CodeActivity

    {

        public OutArgument To1 { getset; }

        public OutArgument To2 { getset; }

        public InArgument Value1 { getset; }

        public InArgument Value2 { getset; }

 

        protected override void Execute(CodeActivityContext context)

        {

            // Obtain the runtime value of the arguments

            this.To1.Set(context, this.Value1.Get(context));

            this.To2.Set(context, this.Value2.Get(context));

        }

    }

}

 

由于我们使用的参数OutArgumentInArgument都是非强类型的,运行时并不会自动添加非强类型的参数,所以我们需要手动做这个工作。我们在重写CacheMetadata中来完成,代码如下:

   protected override void CacheMetadata(CodeActivityMetadata metadata)

        {

            AddArgument(metadata, this.To1, "To1"ArgumentDirection.Out);

            AddArgument(metadata, this.To2, "To2"ArgumentDirection.Out);

            AddArgument(metadata, this.Value1, "Value1"ArgumentDirection.In);

            AddArgument(metadata, this.Value2, "Value2"ArgumentDirection.In);

        }

 

        void AddArgument(CodeActivityMetadata metadata, Argument argument, string argumentName, ArgumentDirection direction)

        {

            Type argumentType = typeof(object);

 

            if (argument != null)

            {

                argumentType = argument.ArgumentType;

            }

 

            RuntimeArgument runtimeArgument = new RuntimeArgument(argumentName, argumentType, direction);

            metadata.Bind(argument, runtimeArgument);

            metadata.AddArgument(runtimeArgument);

        }

2.当然如果你使用强类型的话就不会有这个问题,比如将参数调整为如下:

public OutArgument<string> To1 { getset; }

        public OutArgument<string> To2 { getset; }

        public InArgument<string> Value1 { getset; }

        public InArgument<string> Value2 { getset; }

 

还有一个就是如果没有指定ExpressionTextBoxExpressionType属性,这会导致当你在设计器中如果你表达式值的类型不符合的时候,就会出现下图中比较奇怪的红框。

clip_image002

你可以设置该属性,引入命名空间并设置如下:

xmlns:sys="clr-namespace:System;assembly=mscorlib"

ExpressionType="{x:Type TypeName=sys:String}"

这样设计就可以正常检查你输入的类型了。

 

周末休闲:

迪拜是阿联酋第二大酋长国,拥有世界上第一家七星级酒店、全球最大的购物中心、世界最大的室内滑雪场,来看看这些堪称奇迹的建筑吧!!  阅读全文http://www.cnblogs.com/carysun/archive/2009/12/05/dibai.html

参考资源:

1.http://blogs.msdn.com/cathyk/archive/2009/12/03/using-untyped-arguments-in-an-expressiontextbox.aspx

2. http://msdn.microsoft.com/en-us/library/ee663224(VS.100).aspx
3. http://www.cnblogs.com/carysun/archive/2009/11/13/wf4-ExpressionTextBox.html
4. http://msdn.microsoft.com/en-us/library/ee663224(VS.100).aspx
5. http://msdn.microsoft.com/en-us/library/system.activities.presentation.view.expressiontextbox.expressiontype(VS.100).aspx


本文转自生鱼片博客园博客,原文链接:http://www.cnblogs.com/carysun/archive/2009/12/05/ExpressionTextBox-issue.html,如需转载请自行联系原作者

相关文章
Online Judge System 中术语含义: OJ、AC、WA、TLE、OLE、MLE、PE、RE、CE
Online Judge System 中术语含义: OJ、AC、WA、TLE、OLE、MLE、PE、RE、CE
3575 0
Online Judge System 中术语含义: OJ、AC、WA、TLE、OLE、MLE、PE、RE、CE
|
7月前
|
存储 安全 API
深入剖析 Qt QMultiHash:原理、应用与技巧
深入剖析 Qt QMultiHash:原理、应用与技巧
202 2
深入剖析 Qt QMultiHash:原理、应用与技巧
|
7月前
|
算法
数据包络分析(DEA)——BCC模型
数据包络分析(DEA)——BCC模型
1278 0
|
数据库管理
GM(1,1)应用案例1
GM(1,1)应用案例1
128 0
|
Android开发 C++ 芯片
nios ii小实验——第一个demo指导书
nios ii小实验——第一个demo指导书
193 0
nios ii小实验——第一个demo指导书
|
SQL 安全 Oracle
BS与CS的联系与区别
C/S是Client/Server的缩写。 服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQL Server。 客户端需要安装专用的客户端软件。 B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。 在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。 浏览器通过Web
220 0
|
Web App开发 前端开发 iOS开发
Bulma 教程,Bulma 指南,Bulma 实战,Bulma 中文手册
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xmt1139057136/article/details/78328987 B...
1789 0
SAP QM 含有HUM的检验批做UD时候的不同之处?
SAP QM 含有HUM的检验批做UD时候的不同之处?
SAP QM 含有HUM的检验批做UD时候的不同之处?
|
移动开发 算法 Python
ML之RS之MF:基于简单的张量分解MF算法进行打分和推荐
ML之RS之MF:基于简单的张量分解MF算法进行打分和推荐
ML之RS之MF:基于简单的张量分解MF算法进行打分和推荐
|
安全 搜索推荐 前端开发
BS与CS的联系和差异
  一、什么是CS?   CS(Client/Server):客户端----服务器结构。它的主要特点是交互性强、具有安全的存取模式、网络通信量低、响应速度快、利于处理大量数据。因为客户端要负责绝大多数的业务逻辑和UI展示,又称为胖客户端。它充分利用两端硬件,将任务分配到Client 和Server两端,降低了系统的通讯开销。   C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件,加之产品的更新换代十分快,已经很难适应百台电脑以上局域网用户同时使用。   C/S 架构是一种典型的两层架构,其客户端包含一个或多个在用户的电脑上运行的程序,而服务器端有两种,一种是数据库服务器端,客
294 0