Browse Source

Handle IsReadOnly correct for DataGridTemplateColumn

Tim U 3 years ago
parent
commit
66a02a37d0

+ 1 - 1
src/Avalonia.Controls.DataGrid/DataGridColumn.cs

@@ -448,7 +448,7 @@ namespace Avalonia.Controls
             internal set;
         }
 
-        public bool IsReadOnly
+        public virtual bool IsReadOnly
         {
             get
             {

+ 23 - 2
src/Avalonia.Controls.DataGrid/DataGridTemplateColumn.cs

@@ -15,7 +15,7 @@ namespace Avalonia.Controls
 {
     public class DataGridTemplateColumn : DataGridColumn
     {
-        IDataTemplate _cellTemplate;
+        private IDataTemplate _cellTemplate;
 
         public static readonly DirectProperty<DataGridTemplateColumn, IDataTemplate> CellTemplateProperty =
             AvaloniaProperty.RegisterDirect<DataGridTemplateColumn, IDataTemplate>(
@@ -54,7 +54,7 @@ namespace Avalonia.Controls
         {
             // IsReadOnly = true;
         }
-
+        
         protected override IControl GenerateElement(DataGridCell cell, object dataItem)
         {
             if(CellTemplate != null)
@@ -78,6 +78,10 @@ namespace Avalonia.Controls
             {
                 return CellEditingTemplate.Build(dataItem);
             }
+            else if (CellTemplate != null)
+            {
+                return CellTemplate.Build(dataItem);
+            }
             if (Design.IsDesignMode)
             {
                 return null;
@@ -103,5 +107,22 @@ namespace Avalonia.Controls
 
             base.RefreshCellContent(element, propertyName);
         }
+        
+        public override bool IsReadOnly
+        {
+            get
+            {
+                if (CellEditingTemplate is null)
+                {
+                    return true;
+                }
+
+                return base.IsReadOnly;
+            }
+            set
+            {
+                base.IsReadOnly = value;
+            }
+        }
     }
 }