Пример #1
0
        internal static Tuple <string, ITypeInfo, ResourceSource> RequestConverter(FrameworkElement owner, TargetPlatform platform, object target, AsyncValue <IReadOnlyDictionary <IAssemblyInfo, ILookup <string, ITypeInfo> > > assignableTypes)
        {
            Window hostWindow = Window.GetWindow(owner);
            var    w          = new CreateValueConverterWindow(owner.Resources.MergedDictionaries, platform, target, assignableTypes)
            {
                Owner = hostWindow,
            };

            if (!w.ShowDialog() ?? false)
            {
                return(null);
            }

            var vm = (AddValueConverterViewModel)w.DataContext;

            return(new Tuple <string, ITypeInfo, ResourceSource> (w.converterName.Text, vm.SelectedType, vm.Source));
        }
        private void OnCreateValueConverterRequested(object sender, CreateValueConverterEventArgs e)
        {
            var       vm             = (CreateBindingViewModel)DataContext;
            ITypeInfo valueConverter = vm.TargetPlatform.EditorProvider.KnownTypes[typeof(CommonValueConverter)];

            var typesTask = vm.TargetPlatform.EditorProvider.GetAssignableTypesAsync(valueConverter, childTypes: false)
                            .ContinueWith(t => t.Result.GetTypeTree(), TaskScheduler.Default);

            var result = CreateValueConverterWindow.RequestConverter(this, vm.TargetPlatform, vm.Target, new AsyncValue <IReadOnlyDictionary <IAssemblyInfo, ILookup <string, ITypeInfo> > > (typesTask));

            if (result == null)
            {
                return;
            }

            e.Name          = result.Item1;
            e.ConverterType = result.Item2;
            e.Source        = result.Item3;
        }