2013-02-01 18 views
5

Workflow Foundation'da özel etkinlikler ve tasarımcılar kullanarak bir sorun yaşıyorum.Workflow Foundation - Custom Designer'da InArgument Ata

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

Ve tasarımcı şudur: aşağıda gösterildiği gibi, söz uğruna, ben, çok basit bir aktiviteye oluşturduk

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

ben TextBox tip şeyler, ben Bir hata: geçersiz l-değeri ifadesi, ancak özellik kılavuzunda değeri yazarsanız, TextBox güncelleştirilir.

Bunu hiç kimse gördü mü?

Teşekkürler. XAML gelen

+0

SSCCE'nizin doğruluğundan emin misiniz? Durduğu gibi, tasarım sırasında, 'Metin' * null * olacaktır, bu da ilk seferde 'ArgumentToExpressionConverter' ile ilgili sorunlara neden olabilir. 'Etkinliğiniz' içinden 'IActivityTemplateFactory' uygulamasını deneyin, 'Text'i yeni bir' InArgument 'olarak ayarlayın, iş akışınızı yeniden oluşturun (araç kutusundan tasarım yüzeyine sürükleyin!) Ve sorununuzu çözüp çözmediğine bakın. Eğer öyleyse, bana bildirin ve ben addl detayları ile bir cevaba dönüştüreceğim. – Will

+0

IATF hakkında daha fazla bilgi edinmek isterseniz, [nasıl çalıştığına ve nasıl kullanıldığına ilişkin cevaplarıma bakın] (http://stackoverflow.com/search?q=user%3A1228+is%3Aanswer+IActivityTemplateFactory). – Will

+0

'Metin 'tasarım zamanında boş bırakılamaz. Doğru şekilde bağlarsanız, 'ExpressionTextBox' üzerinde bir şey yazdığınız andan itibaren boş olmaz. Aksi takdirde, örneğin 'CacheMetadata' üzerinde doğrulama yapamazsınız. – Joao

cevap

4

Kaldır UseLocationExpression mülkiyet veya Yanlış doğru çevirin. Kodunuzun geri kalanı doğru görünüyor.

Kontrol MSDN mülkiyet açıklamalar:

bir OutArgument bağlamak istediğinizde sadece kullanılacak oluyor

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

Teşekkürler Jota, bir çekicilik gibi çalıştı! –