2

デザイン時に作成される引数を持つカスタム アクティビティを作成しましたが、デザイナーでそれらを ExpressionTextBox に関連付ける際に問題が発生しています。

ExpressionTextBox がデザイナに表示され、バインド先の Argument の値が反映されますが、ExpressionTextBox に式を入力しても引数に戻されません。例/コードは順番に。

画像を投稿することはできないので、リンクを張る必要があります。 デザイナーの例

上の画像では、2 番目の ETB に「param2」を入力し、[引数の編集] ボタンをクリックしました。([引数の編集] ボタンには、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 として定義されており、現在リストに 2 つの項目があります)

DynamicArgumentDialog を使用して引数を設定することもできますが、デザイナーに表示させたいと思っています。誰かがこれに何か問題があると思いますか?なぜそれが機能しないのですか?

サンプルもありますので、見たい方はどうぞ。 DynamicArgumentTest

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 に答える