示例#1
0
        private async void RequestTypes()
        {
            if (Property == null)
            {
                return;
            }

            if (Editors.Count == 0)
            {
                SuggestedTypes  = new ObservableCollectionEx <ITypeInfo> ();
                AssignableTypes = new AsyncValue <IReadOnlyDictionary <IAssemblyInfo, ILookup <string, ITypeInfo> > > (
                    Task.FromResult <IReadOnlyDictionary <IAssemblyInfo, ILookup <string, ITypeInfo> > > (
                        new Dictionary <IAssemblyInfo, ILookup <string, ITypeInfo> > ()));
                SelectedType = null;
                return;
            }

            var types = Editors.GetCommonAssignableTypes(Property, childTypes: true);
            var assignableTypesTask = types.ContinueWith(t => t.Result.GetTypeTree(), TaskScheduler.Default);

            AssignableTypes = new AsyncValue <IReadOnlyDictionary <IAssemblyInfo, ILookup <string, ITypeInfo> > > (assignableTypesTask);

            var results   = await types;
            var suggested = new ObservableCollectionEx <ITypeInfo> (results.SuggestedTypes);

            if (results.AssignableTypes.Count > suggested.Count)
            {
                suggested.Add(OtherType);
            }

            SuggestedTypes = suggested;
            SelectedType   = (results.SuggestedTypes.Count > 0) ? results.SuggestedTypes[0] : null;
        }
示例#2
0
        private async Task <IReadOnlyDictionary <IAssemblyInfo, ILookup <string, ITypeInfo> > > GetAssignableTypesAsync()
        {
            AssignableTypesResult result = await Editors.GetCommonAssignableTypes(Property, childTypes : false).ConfigureAwait(false);

            return(result.GetTypeTree());
        }