2

我创建了一个自定义活动,其中包含在设计时创建的参数,并且在将它们与设计器中的 ExpressionTextBox 关联时遇到问题。

ExpressionTextBox 显示在设计器中,它们反映了它所绑定的 Argument 的值,但是在 ExpressionTextBox 中输入表达式不会被路由回参数。示例/代码是有序的。

它不会让我发布图片,所以必须做一个链接。 设计器示例

在上图中,我在第二个 ETB 中输入了“param2”,然后单击了“编辑参数”按钮。(编辑参数按钮显示一个 DynamicArgumentDialog)。如果我在 DyanmicArgumentDialog 中输入一个值,那么当我单击“确定”时,它确实会显示在设计器上。

这是我的设计师的 xaml(我可能遗漏了一些东西)

<ItemsControl Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" ItemsSource="{Binding ModelItem.Arguments}">
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <Grid>
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="70" SharedSizeGroup="nameColumn" />
          <ColumnDefinition Width="200" />
        </Grid.ColumnDefinitions>

        <sapv:ExpressionTextBox Grid.Column="1"
                                Expression="{Binding Path=., Mode=TwoWay, Converter={StaticResource expressionConverter}, ConverterParameter=Out}"
                                OwnerActivity="{Binding DataContext.ModelItem, ElementName=layoutRoot}"
                                ExpressionType="s:String"
                                UseLocationExpression="True"
                                MaxLines="1"
                                AcceptsReturn="False" />

      </Grid>
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>

(layoutRoot 是我的设计器的根元素的名称,这样我就可以从 ItemTemplate 内部访问 ModelItem)(我的 Activity 上的 Arguments 属性定义为 Collection 并且当前在列表中有两个项目)

虽然我可以只使用 DynamicArgumentDialog 来设置我的论点,但我希望让它们显示在设计器中。任何人都可以看到这有什么问题,也许为什么它不起作用?

如果有人想看一下,我也有一个样本。 动态参数测试

有没有人幸运地让 ExpressionTextBoxes 与动态参数一起正常工作?

4

1 回答 1

0

在代码中设置绑定

var bind = new Binding();
bind.Mode = BindingMode.TwoWay;
bind.Converter = new ArgumentToExpressionConverter();
bind.ConverterParameter = direction;
bind.Path = new PropertyPath(
String.Format("ModelItem.Arguments[{0}]", argumentName));

//Out arguments require L-Value expression
if (direction == "out")
    expressionTbx.UseLocationExpression = true;

//Set the binding and Add the expression block to the grid
expressionTbx.SetBinding(ExpressionTextBox.ExpressionProperty, bind);

http://blogs.microsoft.co.il/blogs/applisec/archive/2010/06/14/how-to-bind-wf-4-0-arguments-to-expressiontextbox-in-code.aspx

于 2013-04-19T14:49:09.887 回答