修改這是我在做一個更通用的解決方案,這樣的嘗試。我有幾個屬性 - 一些IEnumerable,一些字符串,一些int,並且爲每個屬性創建一個值轉換器似乎都是錯誤的方法。我很想知道我在這裏沒有遇到過什麼情況,因爲我對WF比較陌生。希望這有助於某人。
public class ArgumentConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
object convertedValue = null;
if(value != null)
{
var argumentModelItem = value as ModelItem;
if(argumentModelItem != null)
{
ModelProperty argumentModelProperty = argumentModelItem.Properties["Expression"];
if(argumentModelProperty != null && argumentModelProperty.Value != null)
{
var computedValue = argumentModelProperty.ComputedValue;
var activity = (Activity) computedValue;
convertedValue = WorkflowInvoker.Invoke(activity)["Result"];
}
}
}
return convertedValue;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
// here targetType should be InArgument<T>
// assume a single generic argument
Type arg0 = targetType.GetGenericArguments()[0];
ConstructorInfo argConstructor = targetType.GetConstructor(new[] {arg0});
var argument = argConstructor.Invoke(new[] { value });
return argument;
}
#endregion
}
** NOTE **:我發現上述代碼只會由於ComputedValue和工作流實例的工作方式而執行一次。但是,如果序列化活動,將其反序列化,並將新的反序列化實例傳遞到WorkflowInvoker.Invoke()中,它確實可行。 – 2011-09-07 16:01:45