2012-04-08 5 views
0

사용자가 리 호스팅 된 디자이너 환경의 드롭 다운 목록에서 변수를 선택하는 사용자 지정 활동이 있습니다. 내 문제는 그 가치와 함께 변수의 이름을 얻고 싶다.
내 사용자 지정 활동에 "InArgument MyVar {get; set;}"이 있다고 가정 해 봅시다. "((Microsoft.VisualBasic.Activities.VisualBasicValue) MyVar.Expression) .ExpressionText"구문 분석을 통해 현재 변수의 이름을 가져 왔습니다. 더 좋은 방법이 있습니까?InArgument에서 변수 이름 가져 오기

답변

0

런타임까지는 인수의 실제 값을 확실하게 알 수 없습니다.

하지만, 당신이 그것을 취할 수는 그 확장 방법을 사용하여 기본 값을이다 :, 사용에주의해야 보장되지

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

+0

당신은 변수가 InArgument에 전달되는 런타임에, 참조 전달 된 변수의 이름을 가져 오려고합니다. – Arvand

+0

@Arvand 디자인 타임에 가치를 잃지 않고 런타임에 원한다면 맞습니까? 명확히하기 위해 런타임에 변수 이름을 왜 원하는가? –

+0

변수가 비즈니스 로직을 기반으로 만들어지기 때문에 디자이너가 열릴 때 변수가 xaml 파일에 자동으로 만들어지고 비즈니스는 변수에 대한 감각을 가지므로 런타임에는 Dictionary of 를 전달합니다. 다른 방법에 대한 내 사용자 정의 활동. – Arvand

관련 문제