private IEnumerable <CompletionData> GetElementNamesInPropertyContext(ControlPropertyMetadata controlProperty) { IEnumerable <CompletionData> filteredControls; if (CheckType(controlProperty.Type, typeof(ITemplate))) { // all controls can appear in a template filteredControls = metadata.Select(c => new CompletionData(c.Key, c.Key)); } else { // resolve element type var iEnumerable = CompletionHelper.FindIEnumerableType(controlProperty.Type); var elementType = iEnumerable != null ? iEnumerable.TypeArguments[0] : controlProperty.Type; // filter the allControls collection var filteredControlMetadata = metadata.Where(m => CompletionHelper.IsAssignable(m.Value.Type, elementType)); filteredControls = filteredControlMetadata.Select(c => new CompletionData(c.Key, c.Key)); } return(filteredControls); }