我已经写它包含一个简单的ExpressionTextBox自定义活动:
<sapv:ExpressionTextBox HintText="List of Strings"
Grid.Row ="0" Grid.Column="1" MaxWidth="150" MinWidth="150" Margin="5"
OwnerActivity="{Binding Path=ModelItem}"
Expression="{Binding Path=ModelItem.Test, Mode=TwoWay,
Converter={StaticResource ArgumentToExpressionConverter},
ConverterParameter=In }" />
在图书馆里,我已经添加了测试属性,如下所示:
public InArgument<string> Test { get; set; }
所以,这就是整个事情:
A,而和类型的变量I I在其范围限定。 我希望回去“的Test1”,“Test2的” ...等等,而是我得到:
所以,这变量i被看作是一个字符串,而不是解释为变量部分中定义的整数。 我已经与字符串类型也是一个简单的属性尝试这样做。 然后,我认为InArgument可能处理的事情..我不知道该怎么办了。 这个任何线索?
我可能需要更多的代码张贴至BB能帮助更多的,充分了解你想要达到的目标。 但是从屏幕截图我可以看到你没有访问缓存中的元数据方法运行参数。 随后,您所呼叫的控制台WriteLine方法被解释的原始文本值,而不是正确地计算表达式。
试试下面的代码活动
using System;
using System.ComponentModel;
using System.IO;
using System.Runtime;
using System.Activities.Validation;
using System.Collections.Generic;
using System.Windows.Markup;
using System.Collections.ObjectModel;
using System.Activities;
namespace WorkflowConsoleApplication2
{
public sealed class CodeActivity1 : CodeActivity
{
// Define an activity input argument of type string
[DefaultValue(null)]
public InArgument<string> Test
{
get;
set;
}
protected override void CacheMetadata(CodeActivityMetadata metadata)
{
RuntimeArgument textArgument = new RuntimeArgument("Test", typeof(string), ArgumentDirection.In);
metadata.Bind(this.Test, textArgument);
metadata.SetArgumentsCollection(
new Collection<RuntimeArgument>
{
textArgument,
});
}
// If your activity returns a value, derive from CodeActivity<TResult>
// and return the value from the Execute method.
protected override void Execute(CodeActivityContext context)
{
Console.WriteLine(this.Test.Get(context));
}
}
}