Arguments 如何在ActivityDesigner中访问活动参数?

Arguments 如何在ActivityDesigner中访问活动参数?,arguments,workflow-foundation,activitydesigner,Arguments,Workflow Foundation,Activitydesigner,我需要在ActivityDesigner获取自定义活动的inagrament值 我的活动: [Designer(typeof(ReadTextDesigner))] public sealed class ReadText : CodeActivity { public InArgument<string> ImageName { get; set; } protected override void Execute(CodeActivityContext cont

我需要在
ActivityDesigner
获取自定义活动的
inagrament

我的活动:

[Designer(typeof(ReadTextDesigner))]
public sealed class ReadText : CodeActivity
{
    public InArgument<string> ImageName { get; set; }

    protected override void Execute(CodeActivityContext context)
    {
    }
}
我还有一个按钮,如下图所示,当你点击它时,我可以设置我的自定义活动的值,如下所示:

private void BtnStart\u OnClick(对象发送方,路由目标)
{
this.ModelItem?.Properties[“ImageName”]?.SetValue(新的InArgument()
{
Expression=“some value”
});
}
XAML:



如何在Gument
ReadTextDesigner
constructor中获取活动?

这很奇怪,但我找到了一个解决方法。虽然这是一个解决方案,但我希望有一个更好的解决方案

由于在构造函数中,我无法获取
ModelItem
,因此我在主线程之外创建了一个新的
线程。这个新线程等待2毫秒,然后尝试获取
ModelItem
,并以某种方式成功

这是新修改的
ReadTextDesigner
code(注意:我只更改了
ReadTextDesigner
code其他内容)

public ReadTextDesigner()
{
初始化组件();
新建TaskFactory().StartNew(()=>{this.Dispatcher.Invoke(()=>SetImage(this));});
}
私有void SetImage(ReadTextDesigner设计器)
{
睡眠(2);
如果(designer.ModelItem.GetCurrentValue()为ReadText ReadText)
{
var imageName=readText.imageName?.Expression?.Convert();
如果(!string.IsNullOrWhiteSpace(imageName))
{
//imageName此时有一个值!
}
}
}
ModelItem
不再为空,并带有必要的值。 希望这将帮助某人或某人发布更好的解决方案

干杯

public partial class ReadTextDesigner
{
    public ReadTextDesigner()
    {
        InitializeComponent();
        //this.ModelItem is null here.. WHY is it null?
        //How do I get Activity's ImageName here?
    }
}
private void BtnStart_OnClick(object sender, RoutedEventArgs e)
    {
        this.ModelItem?.Properties["ImageName"]?.SetValue(new InArgument<string>()
        {
            Expression = "some value"
        });
    }
<sapv:ExpressionTextBox 
    Expression="{Binding Path=ModelItem.ImageName, Mode=TwoWay, Converter={StaticResource ArgumentToExpressionConverter}, ConverterParameter=In }"
    ExpressionType="s:String"
    HintText="Enter a string"
    OwnerActivity="{Binding Path=ModelItem}"
    Width="110"
    Margin="0,5"
    Grid.Row="0"
    MaxLines="1"
    x:Name="TxtImagePath"/>

<Button Grid.Column="0" Grid.Row="1" Content="Get Image" HorizontalAlignment="Center" Click="BtnStart_OnClick" x:Name="BtnStart"/>
public ReadTextDesigner()
{
    InitializeComponent();

    new TaskFactory().StartNew(() => { this.Dispatcher.Invoke(() => SetImage(this)); });
}

private void SetImage(ReadTextDesigner designer)
{
    Thread.Sleep(2);
    if (designer.ModelItem.GetCurrentValue() is ReadText readText)
    {
        var imageName = readText.ImageName?.Expression?.Convert<string>();
        if (!string.IsNullOrWhiteSpace(imageName))
        {
            //imageName has a value at this point!
        }
    }
}