2013-02-01 4 views
5

Workflow Foundationでカスタムアクティビティやデザイナーを使用する際に問題が発生しています。以下に示すように、質問のために、私は、非常に単純なアクティビティを作成しました:Workflow Foundation - カスタムデザイナーでInArgumentを割り当てる

[Designer(typeof(TesteDesigner))] 
public sealed class Teste : CodeActivity 
{ 
    // Define an activity input argument of type string 
    [RequiredArgument] 
    public InArgument<string> Text { get; set; } 

    // If your activity returns a value, derive from CodeActivity<TResult> 
    // and return the value from the Execute method. 
    protected override void Execute(CodeActivityContext context) 
    { 
     // Obtain the runtime value of the Text input argument 
     string text = context.GetValue(this.Text); 
    } 
} 

、デザイナーは以下の通りです:

<sap:ActivityDesigner x:Class="ActivityDesignerLibrary1.TesteDesigner" 
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
         xmlns:sap="clr-namespace:System.Activities.Presentation;assembly=System.Activities.Presentation" 
         xmlns:sapv="clr-namespace:System.Activities.Presentation.View;assembly=System.Activities.Presentation" 
         xmlns:System="clr-namespace:System;assembly=mscorlib" 
         xmlns:Converters="clr-namespace:System.Activities.Presentation.Converters;assembly=System.Activities.Presentation"> 
    <sap:ActivityDesigner.Resources> 
     <Converters:ArgumentToExpressionConverter x:Key="ArgumentToExpressionConverter" /> 
    </sap:ActivityDesigner.Resources> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 
     <TextBlock Text="Valor: " 
        VerticalAlignment="Center" /> 
     <sapv:ExpressionTextBox HintText="Valor" 
           Expression="{Binding Path=ModelItem.Text, Mode=TwoWay, Converter={StaticResource ArgumentToExpressionConverter}, ConverterParameter=In}" 
           ExpressionType="{x:Type System:String}" 
           OwnerActivity="{Binding Path=ModelItem}" 
           UseLocationExpression="True" 
           Grid.Column="1" 
           Margin="3,0,0,0" /> 
    </Grid> 
</sap:ActivityDesigner> 

私はテキストボックスに何かを入力すると、私はエラーが発生します:無効なl-value式ですが、プロパティグリッドに値を入力するとTextBoxが更新されます。

誰もこれを見たことがありますか?

ありがとうございました。

+0

SSCCEは正しいですか?そのままでは、デザイン時に、 'Text'は* null *になります。これは、最初にArgumentToExpressionConverterで問題を引き起こす可能性があります。あなたの 'Activity'内で' IActivityTemplateFactory'を実装し、 'Text'を新しい' InArgument 'と同じように設定して、あなたのワークフローを再作成します(ツールボックスからデザイン面にドラッグしてください)。もしそうなら、私に知らせてください、そして、私はこれをaddlの詳細の答えに変換します。 – Will

+0

IATFについての詳しい情報が必要な場合は、[どのように動作し、どのように使用されているのかについての私の回答をチェックしてください(http://stackoverflow.com/search?q=user%3A1228+is%3Aanswer+IActivityTemplateFactory)。 – Will

+0

'Text 'は設計時にはnullになりません。正しくバインドすると、 'ExpressionTextBox'に何かを書く時からnullにはなりません。さもなければ、あなたは 'CacheMetadata'でバリデーションを行うことができません。 – Joao

答えて

4

はあなたのXAMLからUseLocationExpressionプロパティを削除するか、にそれを回します。残りのコードは正しいようです。

MSDNのプロパティの発言を確認してください:

A location expression (or L-value expression) is a type of expression that evaluates to an identifier and can be placed on the left hand side of an assignment statement. When you are binding the ExpressionTextBox to an Out argument, you would set this property to True.

それはあなたがOutArgumentをバインドする場合にのみ使用することがあります。

+0

ありがとうJota、それは魅力のように働いた! –

関連する問題