diff --git a/Aurora.gtk/Aurora.gtk.csproj b/Aurora.gtk/Aurora.gtk.csproj
index f5ecc4a..08f7eb5 100644
--- a/Aurora.gtk/Aurora.gtk.csproj
+++ b/Aurora.gtk/Aurora.gtk.csproj
@@ -79,9 +79,6 @@
..\packages\taglib-sharp-netstandard2.0.2.1.0\lib\netstandard2.0\taglib-sharp.dll
-
- ..\packages\Xamarin.Forms.DataGrid.3.1.0\lib\netstandard2.0\Xamarin.Forms.DataGrid.dll
-
..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.dll
diff --git a/Aurora.gtk/packages.config b/Aurora.gtk/packages.config
index bae457d..ec8433b 100644
--- a/Aurora.gtk/packages.config
+++ b/Aurora.gtk/packages.config
@@ -31,6 +31,5 @@
-
\ No newline at end of file
diff --git a/Aurora/Aurora.csproj b/Aurora/Aurora.csproj
index 9533cee..9a68ccd 100644
--- a/Aurora/Aurora.csproj
+++ b/Aurora/Aurora.csproj
@@ -10,7 +10,6 @@
-
@@ -42,6 +41,7 @@
+
@@ -55,9 +55,15 @@
+
+
+
PreserveNewest
+
+
+
\ No newline at end of file
diff --git a/Aurora/Design/Components/DataGrid/ColumnCollection.cs b/Aurora/Design/Components/DataGrid/ColumnCollection.cs
new file mode 100644
index 0000000..1906bcb
--- /dev/null
+++ b/Aurora/Design/Components/DataGrid/ColumnCollection.cs
@@ -0,0 +1,8 @@
+using System.Collections.Generic;
+
+namespace Aurora.Design.Components.DataGrid
+{
+ public sealed class ColumnCollection : List
+ {
+ }
+}
diff --git a/Aurora/Design/Components/DataGrid/DataGrid.xaml b/Aurora/Design/Components/DataGrid/DataGrid.xaml
new file mode 100644
index 0000000..dc825b6
--- /dev/null
+++ b/Aurora/Design/Components/DataGrid/DataGrid.xaml
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Aurora/Design/Components/DataGrid/DataGrid.xaml.cs b/Aurora/Design/Components/DataGrid/DataGrid.xaml.cs
new file mode 100644
index 0000000..aba83ea
--- /dev/null
+++ b/Aurora/Design/Components/DataGrid/DataGrid.xaml.cs
@@ -0,0 +1,650 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.Linq;
+using System.Reflection;
+using System.Windows.Input;
+using Xamarin.Forms;
+using Aurora.Utils;
+
+namespace Aurora.Design.Components.DataGrid
+{
+ public partial class DataGrid : Grid
+ {
+
+ public event EventHandler Refreshing;
+ public event EventHandler ItemSelected;
+
+ #region Bindable properties
+ public static readonly BindableProperty ActiveRowColorProperty =
+ BindableProperty.Create(nameof(ActiveRowColor), typeof(Color), typeof(DataGrid), Color.FromRgb(128, 144, 160),
+ coerceValue: (b, v) =>
+ {
+ if (!(b as DataGrid).SelectionEnabled)
+ throw new InvalidOperationException("Datagrid must be SelectionEnabled=true to set ActiveRowColor");
+ return v;
+ });
+
+ public static readonly BindableProperty HeaderBackgroundProperty =
+ BindableProperty.Create(nameof(HeaderBackground), typeof(Color), typeof(DataGrid), Color.White,
+ propertyChanged: (b, o, n) =>
+ {
+ var self = b as DataGrid;
+ if (self._headerView != null && !self.HeaderBordersVisible)
+ self._headerView.BackgroundColor = (Color)n;
+ });
+
+ public static readonly BindableProperty BorderColorProperty =
+ BindableProperty.Create(nameof(BorderColor), typeof(Color), typeof(DataGrid), Color.Black,
+ propertyChanged: (b, o, n) =>
+ {
+ var self = b as DataGrid;
+ if (self.HeaderBordersVisible)
+ self._headerView.BackgroundColor = (Color)n;
+
+ if (self.Columns != null && self.ItemsSource != null)
+ self.Reload();
+ });
+
+ public static readonly BindableProperty RowsBackgroundColorPaletteProperty =
+ BindableProperty.Create(nameof(RowsBackgroundColorPalette), typeof(IColorProvider), typeof(DataGrid), new PaletteCollection { default(Color) },
+ propertyChanged: (b, o, n) =>
+ {
+ var self = b as DataGrid;
+ if (self.Columns != null && self.ItemsSource != null)
+ self.Reload();
+ });
+
+ public static readonly BindableProperty RowsTextColorPaletteProperty =
+ BindableProperty.Create(nameof(RowsTextColorPalette), typeof(IColorProvider), typeof(DataGrid), new PaletteCollection { Color.Black },
+ propertyChanged: (b, o, n) =>
+ {
+ var self = b as DataGrid;
+ if (self.Columns != null && self.ItemsSource != null)
+ self.Reload();
+ });
+
+ public static readonly BindableProperty ColumnsProperty =
+ BindableProperty.Create(nameof(Columns), typeof(ColumnCollection), typeof(DataGrid),
+ propertyChanged: (b, o, n) => (b as DataGrid).InitHeaderView(),
+ defaultValueCreator: b => { return new ColumnCollection(); }
+ );
+
+ public static readonly BindableProperty ItemsSourceProperty =
+ BindableProperty.Create(nameof(ItemsSource), typeof(IEnumerable), typeof(DataGrid), null,
+ propertyChanged: (b, o, n) =>
+ {
+ DataGrid self = b as DataGrid;
+ //ObservableCollection Tracking
+ if (o != null && o is INotifyCollectionChanged)
+ (o as INotifyCollectionChanged).CollectionChanged -= self.HandleItemsSourceCollectionChanged;
+
+ if (n != null)
+ {
+ if (n is INotifyCollectionChanged)
+ (n as INotifyCollectionChanged).CollectionChanged += self.HandleItemsSourceCollectionChanged;
+
+ self.InternalItems = new List