2013-02-01 18 views
5

Mam problem z wykorzystaniem niestandardowych działań i projektantów w Workflow Foundation. Przez wzgląd na pytanie, jakie stworzył bardzo proste czynności, jak pokazano poniżej:Workflow Foundation - Przypisywanie InArgument w Custom Designer

[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); 
    } 
} 

a projektant jest następujący:

<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> 

Kiedy wpiszesz coś w polu tekstowym, I błąd: niepoprawne wyrażenie o wartości l, ale jeśli wpiszesz wartość na siatce właściwości, TextBox zostanie zaktualizowany.

Czy ktokolwiek to widział?

Dzięki.

+0

Jesteś pewien, że SSCCE jest poprawna? W obecnej formie 'Text' będzie miał * * wartość *, co może powodować problemy z' ArgumentToExpressionConverter' przy pierwszym uruchomieniu. Spróbuj wprowadzić 'IActivityTemplateFactory' w swoim' Activity', ustaw 'Text' równy nowemu' InArgument ', ponownie stwórz swój workflow (przeciągnij go z przybornika na powierzchnię projektową!) I sprawdź, czy to rozwiąże twój problem. Jeśli tak, daj mi znać, a skonwertuję to na odpowiedź z dodatkowymi informacjami. – Will

+0

Jeśli chcesz uzyskać więcej informacji o IATF, [sprawdź moje odpowiedzi na temat działania i sposobu jego użycia] (http://stackoverflow.com/search?q=user%3A1228+is%3Aanswer+IActivityTemplateFactory). – Will

+0

'Tekst' nie ma wartości zerowej w czasie projektowania. Jeśli poprawisz go poprawnie, nie będzie to wartość zerowa od momentu, w którym napiszesz coś na "ExpressionTextBox". W przeciwnym razie nie byłoby możliwe sprawdzenie poprawności na przykład w 'CacheMetadata'. – Joao

Odpowiedz

4

Usuń UseLocationExpression nieruchomość z XAML lub włączyć go do Fałsz. Reszta twojego kodu wydaje się być poprawna.

Sprawdź Uwagi mienia na 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.

to tylko należy się stosować, gdy chcesz związać OutArgument.

+0

Dzięki Jota, działało jak czar !!! –