У меня есть пользовательское действие, в котором пользователь выбирает переменную из раскрывающегося списка в повторно размещенной среде дизайнера. Моя проблема в том, что я хочу получить имя переменной вместе с ее значением.
Допустим, у моей пользовательской активности есть "InArgument MyVar{get; set; }". В настоящее время я получаю имя переменной путем анализа "((Microsoft.VisualBasic.Activities.VisualBasicValue)MyVar.Expression).ExpressionText". Есть ли лучший способ?
Получить имя переменной из InArgument
Ответы (1)
Вы не можете точно знать истинное значение аргумента до времени выполнения.
Но вы можете взять его значение по умолчанию, используя эти методы расширения:
public static T GetImediateValueOrDefault<T>(Activity<T> activity, ModelItem modelItem)
{
if (activity == null)
return default(T);
var exprAsLiteral = activity as Literal<T>;
if (exprAsLiteral != null)
return exprAsLiteral.Value;
var exprAsVbValue = activity as Microsoft.VisualBasic.Activities.VisualBasicValue<string>;
if (exprAsVbValue != null)
return modelItem.GetDefaultValueOfScopedVariable<T>(exprAsVbValue.ExpressionText);
return default(T);
}
public static T GetDefaultValueOfScopedVariable<T>(this ModelItem modelItem, string variableName)
{
IEnumerable<ModelItem> scopedVariables = modelItem.GetScopedVariables();
ModelItem variableModelItem = scopedVariables.FirstOrDefault(v => Equals(variableName, v.Properties["Name"].ComputedValue));
if (variableModelItem == null)
throw new KeyNotFoundException();
Variable<T> variable = variableModelItem.GetCurrentValue() as Variable<T>;
if (variable == null)
return default(T);
return GetImediateValueOrDefault(variable.Default, modelItem);
}
Не гарантируется, используйте с осторожностью
person
Davi Fiamenghi
schedule
09.04.2012
Видите ли, во время выполнения, когда переменная передается в InArgument, я хочу получить имя передаваемой переменной.
- person Arvand; 09.04.2012
@Arvand Вам не нужно значение во время разработки, вам нужно его во время выполнения - это правильно? Просто для пояснения, зачем вам имя переменной во время выполнения?
- person Davi Fiamenghi; 09.04.2012
потому что переменные создаются на основе бизнес-логики, поэтому, когда дизайнер открывается, переменные автоматически создаются в файле xaml, и бизнес имеет смысл о переменных, поэтому во время выполнения я передаю словарь ‹string,objects› из моего пользовательская активность для других методов.
- person Arvand; 10.04.2012