2011-01-14 8 views
1

Können sagen, ich habe eine Aktivität mit InArgument <int> ProductIdWorkflow-4-Aktivität Designer IValueConverter

ich in den Aktivitätsdesignern eine Combobox belichten möchte alle Produkte zu zeigen, und der Benutzer ein Produkt wählen.

kann ich die Liste des Produkts in der Combo kein Problem zeigen. Aber wie Ich binde das ausgewählte Produkt in dem InArgument <int> meiner benutzerdefinierten Aktivität?

Ich glaube, ich brauche eine Art von Valueconverter? Nicht sicher, wie man den Wertkonverter für diesen Fall kodiert, wenn jemand eine Idee, einen Vorschlag hat, wird hilfreich sein. Ich muss das InArgument <int> zu einem int konvertieren? und der Konvertit zurück von int nach InArgument <int>

Danke,

Antwort

1
public class ArgumentToInt32Converter: IValueConverter { 
    object IValueConverter.Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { 
     object convertedValue = null; 
     if (value != null) { 
      ModelItem argumentModelItem = value as ModelItem; 
      if (argumentModelItem != null && argumentModelItem.Properties["Expression"] != null && argumentModelItem.Properties["Expression"].Value != null) { 
       if (argumentModelItem.Properties["Expression"].ComputedValue.GetType() == typeof(Literal <Int32>)) { 
        convertedValue = (argumentModelItem.Properties["Expression"].ComputedValue as Literal <Int32>).Value; 
       } else { 
        convertedValue = null 
       } 
      } 
     } 
     return convertedValue; 
    } 

    object IValueConverter.ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { 
     // Convert Int32 value to InArgument<Int32> 
     Int32 itemContent = (Int32) value; 
     VisualBasicValue <Int32> vbArgument = new VisualBasicValue <Int32> (itemContent); 
     InArgument <Int32> inArgument = new InArgument <Int32> (vbArgument); 
     return inArgument; 
    } 
} 

Geändert von this answer

1

Das ist mein Versuch ist eine allgemeinere Lösung dieses Problems zu machen. Ich habe mehrere Eigenschaften - einige IEnumerable, einige Zeichenfolge, einige int, und einen Wertkonverter für jede scheint der falsche Ansatz. Ich würde gerne wissen, welche Fälle ich hier nicht entdeckt habe, weil ich relativ neu bei WF bin. Hoffentlich hilft das jemandem.

+0

** HINWEIS **: Ich habe festgestellt, dass der obige Code nur einmal ausgeführt wird, da "ComputedValue" und Workflow-Instanzen funktionieren. Es funktioniert jedoch, wenn Sie die Aktivität serialisieren, deserialisieren und die neue deserialisierte Instanz in 'WorkflowInvoker.Invoke()' übergeben. –

Verwandte Themen