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