将Custom Activity设计器的输出绑定到activity参数

时间:2010-04-26 12:23:07

标签: wpf workflow workflow-foundation-4 custom-activity

我正在尝试为我的活动添加自定义活动设计器。活动看起来有点像:

public class WaitForUserInputActvitiy : NativeActivity
{
    public InArgument<UserInteractionProperty[]> UserInteraction { get; set; }
}

我试图让设计人员参与活动,以便设置这些值更好一些(所以你不要直接输入VB。我的设计师基于mindscape属性网格。我有一个ObservableDictionary源代码我想从中获取值并将它们放入InArgument。目前我正在使用

 private void TestGrid_LostFocus(object sender, RoutedEventArgs e)
 {
    using (ModelEditingScope editingScope = this.ModelItem.BeginEdit())
    {
        Argument myArg = Argument.Create(typeof(WaitForUserInputActvitiy), ArgumentDirection.In);
        this.ModelItem.Properties["UserInteraction"].SetValue(source.Values.ToArray());

        editingScope.Complete();
    }
}

但是这会导致ArgumentException“UserInteractionProperty []类型的对象无法转换为InArgument`1 [UserInteractionProperty []]。

那么如何将我的UserInteractionProperties数组转换为InArgument?

1 个答案:

答案 0 :(得分:1)

我在这里得到一个答案有点迟了,我怀疑你已经找到了你的错误,因为当你开始编写使用UserInteraction的代码时,你将无法从中获取它们。

所以问题是this.ModelItem.Properties["UserInteraction"]正在为InArgument<UserInteractionProperty[]>属性建模,并且您尝试使用UserInteractionProperty[]的值设置它。如果您希望其他工作流元素提供InArgument<UserInteractionProperty[]>列表,则UserInteractionProperty是要使用的类型。看起来情况并非如此 - 我怀疑你想要将你的财产声明为UserInteractionProperty[]

public class WaitForUserInputActvitiy : NativeActivity
{
    public UserInteractionProperty[] UserInteraction { get; set; }
}

但是我建议将其声明为Collection<UserInteractionProperty>,因为那样更好。