1.IfElseActivity有两个IfElseBranch子控件,分别作为IfElse的两个分支容器,系统自动添加,
2.其中左边(为真件条)的IfElseBranch容器要设Condition
一、当你选择Code Condition时
你要在Condition中指明相应的处理方法。注意在下拉表中是不会自动绑定的(个人觉得这是一个bug,自己搞了半天也没找到自动生成的办法),你必须先在代码中写好函数,这个函数必须接受对象和ConditionalEventArgs 类这两个参数,同时返回viod。ConditionalEventArgs 类的 Result 成员将设置为布尔值,代表条件的计算结果。如下所示:
void codecondition1_Condition(object sender, ConditionalEventArgs e)
{
//加入逻辑
e.Result = true;
}
在代码中写入上述代码后,Condition的下拉框就会出现codecondition1_Condition这个选项,选择它后,就规定好了这个分支的触发模式。
我们打开他的designer.cs可以看到这么几句话:
this.ifElseBranchActivity1.Condition = codecondition1;
codecondition1.Condition += new System.EventHandler<System.Workflow.Activities.ConditionalEventArgs>(this.codecondition1_Condition);
你可以在里直接编辑表达式。点击确定后就可以了。
这时,我们突然发现原本只有Workflow1.cs和Workflow1.designer.cs的文件突然又多了个文件,叫Workflow1.rules,打开一看,
<RuleDefinitions xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow">
<RuleDefinitions.Conditions>
<RuleExpressionCondition Name="Condition1">
<RuleExpressionCondition.Expression>
<ns0:CodeBinaryOperatorExpression Operator="Equality" xmlns:ns0="clr-namespace:System.CodeDom;Assembly=System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<ns0:CodeBinaryOperatorExpression.Left>
<ns0:CodeFieldReferenceExpression FieldName="temp">
<ns0:CodeFieldReferenceExpression.TargetObject>
<ns0:CodeThisReferenceExpression />
</ns0:CodeFieldReferenceExpression.TargetObject>
</ns0:CodeFieldReferenceExpression>
</ns0:CodeBinaryOperatorExpression.Left>
<ns0:CodeBinaryOperatorExpression.Right>
<ns0:CodePrimitiveExpression>
<ns0:CodePrimitiveExpression.>
<ns1:Int32 xmlns:ns1="clr-namespace:System;Assembly=mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">123</ns1:Int32>
</ns0:CodePrimitiveExpression.>
</ns0:CodePrimitiveExpression>
</ns0:CodeBinaryOperatorExpression.Right>
</ns0:CodeBinaryOperatorExpression>
</RuleExpressionCondition.Expression>
</RuleExpressionCondition>
</RuleDefinitions.Conditions>
</RuleDefinitions>
注意看到没,红色标志的名字是不是跟那个ConditionName的名字一样,哦,原来是为那个判断生成了一个这样的文件。
下面这段话是我摘的,还没体会到,等以后有体会时再写吧,不过看起来说的不错。
IfElse 活动可以进行嵌套以表示复杂的逻辑,但逻辑的设计仍然要在工作流中进行硬编码。这种方法既有利也有弊。有利的一面在于它使您可以根据您的需求准确设计工作流并将其与其他活动整合。当您需要创建一组规则来初始化部分工作流状态时,其不利的一面就显现出来。让一连串 IfElse 活动仅仅为工作流的内部成员分配值显然有些矫枉过正。