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> 

내가 텍스트 상자에 뭔가를 입력, I 오류가 발생합니다 : 잘못된 l 값 표현식,하지만 속성 표에 값을 입력하면 TextBox가 업데이트됩니다.

본 사람이 있습니까?

감사합니다. 당신의 XAML에서

+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

제거 UseLocationExpression 재산 또는 거짓에 켜십시오. 나머지 코드는 정확합니다.

확인 MSDN의 속성 발언 :

당신이 OutArgument를 바인딩 할 때 만 사용하는 것

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.

.

+0

감사합니다 Jota, 그것은 매력처럼 일했습니다! –

관련 문제