首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问ActivityDesigner中的活动参数?

如何访问ActivityDesigner中的活动参数?
EN

Stack Overflow用户
提问于 2019-05-30 12:57:38
回答 1查看 103关注 0票数 0

我需要在ActivityDesigner上获取自定义活动的ActivityDesigner值。

MyActivity:

代码语言:javascript
复制
[Designer(typeof(ReadTextDesigner))]
public sealed class ReadText : CodeActivity
{
    public InArgument<string> ImageName { get; set; }

    protected override void Execute(CodeActivityContext context)
    {
    }
}

我的设计师:

代码语言:javascript
复制
public partial class ReadTextDesigner
{
    public ReadTextDesigner()
    {
        InitializeComponent();
        //this.ModelItem is null here.. WHY is it null?
        //How do I get Activity's ImageName here?
    }
}

我还有一个按钮,如下图所示,当您单击它时,我可以设置自定义活动的值,如下所示:

代码语言:javascript
复制
private void BtnStart_OnClick(object sender, RoutedEventArgs e)
    {
        this.ModelItem?.Properties["ImageName"]?.SetValue(new InArgument<string>()
        {
            Expression = "some value"
        });
    }

XAML:

代码语言:javascript
复制
<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"/>

如何获得Activity ReadTextDesigner构造函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-31 06:36:57

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

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

下面是新修改的ReadTextDesigner代码(注意:我只更改了ReadTextDesigner代码,没有其他)

代码语言:javascript
复制
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!
        }
    }
}

ModelItem不再是null,并且带有必要的值。希望这将有助于某人或某人发布一个更好的解决方案。

干杯!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56378797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档