Beispiel #1
0
        private void GenerateDataGridColumnsIfNeeded(DataGridElement dataGridElement, IProperty targetProperty)
        {
            if (!DataGridElement.ItemsSourceProperty.Equals((object)targetProperty) && !ItemsControlElement.ItemsSourceProperty.Equals((object)targetProperty) || this.DragModel.RelativeDropSchemaPath.IsProperty)
            {
                return;
            }
            IList <DataSchemaNodePath> relativeSchemaPaths = this.GetRelativeSchemaPaths();

            if (relativeSchemaPaths.Count == 0)
            {
                return;
            }
            using (SceneEditTransaction editTransaction = this.DragModel.Document.CreateEditTransaction(StringTable.UndoUnitCreateTemplate))
            {
                dataGridElement.SetValue(DataGridElement.AutoGenerateColumnsProperty, (object)false);
                ISceneNodeCollection <SceneNode> columnCollection = dataGridElement.ColumnCollection;
                for (int index = 0; index < relativeSchemaPaths.Count; ++index)
                {
                    DataSchemaNodePath schemaPath = relativeSchemaPaths[index];
                    IType type = schemaPath.Type;
                    if (type.NullableType != null)
                    {
                        type = type.NullableType;
                    }
                    SceneNode sceneNode = !PlatformTypes.Boolean.IsAssignableFrom((ITypeId)type) ? (!PlatformTypes.IConvertible.IsAssignableFrom((ITypeId)type) ? this.CreateDataGridTemplateColumn(schemaPath) : this.CreateDataGridBoundColumn(schemaPath, ProjectNeutralTypes.DataGridTextColumn)) : this.CreateDataGridBoundColumn(schemaPath, ProjectNeutralTypes.DataGridCheckBoxColumn);
                    columnCollection.Add(sceneNode);
                }
                editTransaction.Commit();
            }
        }
        public static bool CanEditInPlace(SceneElement targetElement, ReferenceStep targetProperty, DocumentNodePath template)
        {
            DocumentNodePath documentNodePath = targetElement.DocumentNodePath;
            SceneViewModel   viewModel        = targetElement.ViewModel.GetViewModel(template.Node.DocumentRoot, true);

            if (targetElement.IsViewObjectValid && (targetElement.IsInstantiatedElementVisible || PlatformTypes.Style.IsAssignableFrom((ITypeId)template.Node.Type) && (targetProperty.Equals((object)BaseFrameworkElement.StyleProperty) || targetProperty == StyleNode.BasedOnProperty)) && (viewModel == targetElement.ViewModel && documentNodePath.IsAncestorOf(template)))
            {
                if (viewModel.DefaultView.GetInstantiatedElements(template).Count > 0)
                {
                    return(true);
                }
                if (!viewModel.ProjectContext.IsCapabilitySet(PlatformCapability.IsWpf) && PlatformTypes.FrameworkTemplate.IsAssignableFrom((ITypeId)template.Node.Type))
                {
                    SceneNode valueAsSceneNode = viewModel.GetSceneNode(template.Node).GetLocalValueAsSceneNode(viewModel.ProjectContext.PlatformMetadata.KnownProperties.FrameworkTemplateVisualTree);
                    if (valueAsSceneNode != null)
                    {
                        IViewVisual viewVisual = targetElement.ViewTargetElement as IViewVisual;
                        if (viewVisual == null && ProjectNeutralTypes.DataGridColumn.IsAssignableFrom((ITypeId)targetElement.Type))
                        {
                            DataGridElement dataGridElement = targetElement.Parent as DataGridElement;
                            if (dataGridElement != null && targetElement.DocumentNode.IsChild && (targetElement.DocumentNode.Parent.IsProperty && DataGridElement.ColumnsProperty.Equals((object)targetElement.DocumentNode.Parent.SitePropertyKey)))
                            {
                                viewVisual = dataGridElement.ViewTargetElement as IViewVisual;
                            }
                        }
                        if (viewVisual != null)
                        {
                            DocumentNodePath pathInContainer = template.GetPathInContainer(valueAsSceneNode.DocumentNode);
                            foreach (IViewObject viewObject in (IEnumerable <IViewObject>)viewModel.DefaultView.GetInstantiatedElements(pathInContainer))
                            {
                                IViewVisual visual = viewObject as IViewVisual;
                                if (visual != null && viewVisual.IsAncestorOf(visual))
                                {
                                    return(true);
                                }
                            }
                        }
                    }
                }
            }
            return(false);
        }
Beispiel #3
0
        private void GenerateDetailsIfNeeded(SceneNode targetNode, IProperty targetProperty)
        {
            if (!this.ShouldGenerateDetails(targetProperty))
            {
                return;
            }
            DataGridElement dataGridElement = targetNode as DataGridElement;

            if (dataGridElement != null)
            {
                this.GenerateDataGridColumnsIfNeeded(dataGridElement, targetProperty);
            }
            else if (ProjectNeutralTypes.TreeView.IsAssignableFrom((ITypeId)targetNode.Type))
            {
                this.GenerateHierarchicalDataTemplateIfNeeded(targetNode);
            }
            else
            {
                this.GenerateDataTemplateIfNeeded(targetNode, PlatformTypes.DataTemplate);
            }
        }
        private static IEnumerable <IType> GetGridColumnTypes(DataGridElement gridElement)
        {
            IType columnBaseType = gridElement.ColumnBaseType;

            AddDataGridColumnsCommand.resolvedColumnTypes.RemoveAll((Predicate <List <WeakReference> >)(reaOnlyList => !reaOnlyList[0].IsAlive));
            int index = AddDataGridColumnsCommand.resolvedColumnTypes.FindIndex((Predicate <List <WeakReference> >)(reaOnlyList => reaOnlyList[0].Target == columnBaseType));
            List <WeakReference> list = (List <WeakReference>)null;

            if (index >= 0)
            {
                list = AddDataGridColumnsCommand.resolvedColumnTypes[index];
                if (list.Find((Predicate <WeakReference>)(r => !r.IsAlive)) != null)
                {
                    AddDataGridColumnsCommand.resolvedColumnTypes.RemoveAt(index);
                    list = (List <WeakReference>)null;
                }
            }
            if (list == null)
            {
                list = new List <WeakReference>();
                foreach (Type type1 in AssemblyHelper.GetTypes(columnBaseType.RuntimeAssembly))
                {
                    if (columnBaseType.RuntimeType.IsAssignableFrom(type1) && !type1.IsAbstract && (!type1.IsGenericType && !type1.IsNotPublic))
                    {
                        IType type2 = gridElement.DocumentNode.TypeResolver.GetType(type1);
                        list.Add(new WeakReference((object)type2));
                    }
                }
                list.Sort((Comparison <WeakReference>)((a, b) =>
                {
                    string name1 = ((IMemberId)a.Target).Name;
                    string name2 = ((IMemberId)b.Target).Name;
                    return(StringLogicalComparer.Instance.Compare(name1, name2));
                }));
                list.Insert(0, new WeakReference((object)columnBaseType));
                AddDataGridColumnsCommand.resolvedColumnTypes.Add(list);
            }
            return(Enumerable.Select <WeakReference, IType>(Enumerable.Skip <WeakReference>((IEnumerable <WeakReference>)list, 1), (Func <WeakReference, IType>)(r => (IType)r.Target)));
        }
 public AddDataGridColumnCommand(DataGridElement gridElement, IType columnType)
 {
     this.GridElement = gridElement;
     this.ColumnType  = columnType;
 }