我创建了一个自定义活动,其中包含在设计时创建的Arguments,我遇到了将它们与设计器中的ExpressionTextBox相关联的问题。
ExpressionTextBox在设计器中显示,它们反映了它所绑定的Argument的值,但是在ExpressionTextBox中输入表达式不会被路由回参数。示例/代码是有序的。
它不会让我发布图片,所以链接必须要做。 Designer Example
在上图中,我在第二个ETB中输入了'param2',然后点击了'Edit Arguments'按钮。 (“编辑参数”按钮显示DynamicArgumentDialog)。如果我输入DyanmicArgumentDialog中的值,但是当我单击OK时,它会显示在设计器上。
这是我的设计师的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设置我的参数,但我很乐意让它们在设计师中展示。任何人都可以看到这个有什么问题,也许为什么它不起作用?
如果有人想看一下,我也有一个样本。 DynamicArgumentTest
有没有人有幸使用动态参数使ExpressionTextBox正常工作?
答案 0 :(得分: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);