Updating xamarin and ripping out datagrid
This commit is contained in:
parent
4ee5656358
commit
e3eedc5ffa
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\packages\Xamarin.Forms.4.3.0.991211\build\Xamarin.Forms.props" Condition="Exists('..\packages\Xamarin.Forms.4.3.0.991211\build\Xamarin.Forms.props')" />
|
<Import Project="..\packages\Xamarin.Forms.5.0.0.2012\build\Xamarin.Forms.props" Condition="Exists('..\packages\Xamarin.Forms.5.0.0.2012\build\Xamarin.Forms.props')" />
|
||||||
<Import Project="..\packages\Grpc.Tools.2.25.0\build\Grpc.Tools.props" Condition="Exists('..\packages\Grpc.Tools.2.25.0\build\Grpc.Tools.props')" />
|
<Import Project="..\packages\Grpc.Tools.2.25.0\build\Grpc.Tools.props" Condition="Exists('..\packages\Grpc.Tools.2.25.0\build\Grpc.Tools.props')" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
@ -28,42 +28,24 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="gtk-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
|
|
||||||
<SpecificVersion>False</SpecificVersion>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="gdk-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
|
|
||||||
<SpecificVersion>False</SpecificVersion>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="glib-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
|
|
||||||
<SpecificVersion>False</SpecificVersion>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="glade-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
|
|
||||||
<SpecificVersion>False</SpecificVersion>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="pango-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
|
|
||||||
<SpecificVersion>False</SpecificVersion>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="atk-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
|
|
||||||
<SpecificVersion>False</SpecificVersion>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Mono.Posix" />
|
<Reference Include="Mono.Posix" />
|
||||||
<Reference Include="Xamarin.Forms.Core">
|
<Reference Include="Xamarin.Forms.Core">
|
||||||
<HintPath>..\packages\Xamarin.Forms.4.3.0.991211\lib\netstandard2.0\Xamarin.Forms.Core.dll</HintPath>
|
<HintPath>..\packages\Xamarin.Forms.5.0.0.2012\lib\netstandard2.0\Xamarin.Forms.Core.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Xamarin.Forms.Platform">
|
<Reference Include="Xamarin.Forms.Platform">
|
||||||
<HintPath>..\packages\Xamarin.Forms.4.3.0.991211\lib\netstandard2.0\Xamarin.Forms.Platform.dll</HintPath>
|
<HintPath>..\packages\Xamarin.Forms.5.0.0.2012\lib\netstandard2.0\Xamarin.Forms.Platform.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Xamarin.Forms.Xaml">
|
<Reference Include="Xamarin.Forms.Xaml">
|
||||||
<HintPath>..\packages\Xamarin.Forms.4.3.0.991211\lib\netstandard2.0\Xamarin.Forms.Xaml.dll</HintPath>
|
<HintPath>..\packages\Xamarin.Forms.5.0.0.2012\lib\netstandard2.0\Xamarin.Forms.Xaml.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="OpenTK">
|
<Reference Include="OpenTK">
|
||||||
<HintPath>..\packages\OpenTK.3.1.0\lib\net20\OpenTK.dll</HintPath>
|
<HintPath>..\packages\OpenTK.3.1.0\lib\net20\OpenTK.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="webkit-sharp">
|
<Reference Include="webkit-sharp">
|
||||||
<HintPath>..\packages\Xamarin.Forms.Platform.GTK.4.3.0.991211\lib\net45\webkit-sharp.dll</HintPath>
|
<HintPath>..\packages\Xamarin.Forms.Platform.GTK.5.0.0.2012\lib\net45\webkit-sharp.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Xamarin.Forms.Platform.GTK">
|
<Reference Include="Xamarin.Forms.Platform.GTK">
|
||||||
<HintPath>..\packages\Xamarin.Forms.Platform.GTK.4.3.0.991211\lib\net45\Xamarin.Forms.Platform.GTK.dll</HintPath>
|
<HintPath>..\packages\Xamarin.Forms.Platform.GTK.5.0.0.2012\lib\net45\Xamarin.Forms.Platform.GTK.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Reflection">
|
<Reference Include="System.Reflection">
|
||||||
<HintPath>..\packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll</HintPath>
|
<HintPath>..\packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll</HintPath>
|
||||||
@ -168,6 +150,15 @@
|
|||||||
<HintPath>..\packages\Autofac.5.0.0\lib\net461\Autofac.dll</HintPath>
|
<HintPath>..\packages\Autofac.5.0.0\lib\net461\Autofac.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.ComponentModel.Composition" />
|
<Reference Include="System.ComponentModel.Composition" />
|
||||||
|
<Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
|
||||||
|
<Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
|
||||||
|
<Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
|
||||||
|
<Reference Include="glade-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
|
||||||
|
<Reference Include="pango-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
|
||||||
|
<Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
|
||||||
|
<Reference Include="Xamarin.Forms.DataGrid">
|
||||||
|
<HintPath>..\packages\Xamarin.Forms.DataGrid.4.8.0\lib\netstandard2.0\Xamarin.Forms.DataGrid.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<EmbeddedResource Include="gtk-gui\gui.stetic">
|
<EmbeddedResource Include="gtk-gui\gui.stetic">
|
||||||
@ -545,5 +536,5 @@
|
|||||||
<Import Project="..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" />
|
<Import Project="..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" />
|
||||||
<Import Project="..\packages\Grpc.Core.2.25.0\build\net45\Grpc.Core.targets" Condition="Exists('..\packages\Grpc.Core.2.25.0\build\net45\Grpc.Core.targets')" />
|
<Import Project="..\packages\Grpc.Core.2.25.0\build\net45\Grpc.Core.targets" Condition="Exists('..\packages\Grpc.Core.2.25.0\build\net45\Grpc.Core.targets')" />
|
||||||
<Import Project="..\packages\VideoLAN.LibVLC.Mac.3.1.3.1\build\VideoLAN.LibVLC.Mac.targets" Condition="Exists('..\packages\VideoLAN.LibVLC.Mac.3.1.3.1\build\VideoLAN.LibVLC.Mac.targets')" />
|
<Import Project="..\packages\VideoLAN.LibVLC.Mac.3.1.3.1\build\VideoLAN.LibVLC.Mac.targets" Condition="Exists('..\packages\VideoLAN.LibVLC.Mac.3.1.3.1\build\VideoLAN.LibVLC.Mac.targets')" />
|
||||||
<Import Project="..\packages\Xamarin.Forms.4.3.0.991211\build\Xamarin.Forms.targets" Condition="Exists('..\packages\Xamarin.Forms.4.3.0.991211\build\Xamarin.Forms.targets')" />
|
<Import Project="..\packages\Xamarin.Forms.5.0.0.2012\build\Xamarin.Forms.targets" Condition="Exists('..\packages\Xamarin.Forms.5.0.0.2012\build\Xamarin.Forms.targets')" />
|
||||||
</Project>
|
</Project>
|
@ -2,6 +2,7 @@
|
|||||||
<stetic-interface>
|
<stetic-interface>
|
||||||
<configuration>
|
<configuration>
|
||||||
<images-root-path>..</images-root-path>
|
<images-root-path>..</images-root-path>
|
||||||
|
<target-gtk-version>2.12</target-gtk-version>
|
||||||
</configuration>
|
</configuration>
|
||||||
<import>
|
<import>
|
||||||
<widget-library name="glade-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
|
<widget-library name="glade-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
<package id="Grpc.Core" version="2.25.0" targetFramework="net47" />
|
<package id="Grpc.Core" version="2.25.0" targetFramework="net47" />
|
||||||
<package id="Grpc.Core.Api" version="2.25.0" targetFramework="net47" />
|
<package id="Grpc.Core.Api" version="2.25.0" targetFramework="net47" />
|
||||||
<package id="Grpc.Tools" version="2.25.0" targetFramework="net47" developmentDependency="true" />
|
<package id="Grpc.Tools" version="2.25.0" targetFramework="net47" developmentDependency="true" />
|
||||||
<package id="LibVLCSharp" version="3.3.1" targetFramework="net47" />
|
<package id="LibVLCSharp" version="3.3.1" targetFramework="net47" requireReinstallation="true" />
|
||||||
<package id="LibVLCSharp.Forms" version="3.3.1" targetFramework="net47" />
|
<package id="LibVLCSharp.Forms" version="3.3.1" targetFramework="net47" />
|
||||||
<package id="LibVLCSharp.Forms.GTK" version="3.3.1" targetFramework="net47" />
|
<package id="LibVLCSharp.Forms.GTK" version="3.3.1" targetFramework="net47" />
|
||||||
<package id="LibVLCSharp.GTK" version="3.3.1" targetFramework="net47" />
|
<package id="LibVLCSharp.GTK" version="3.3.1" targetFramework="net47" />
|
||||||
@ -25,7 +25,7 @@
|
|||||||
<package id="System.Memory" version="4.5.3" targetFramework="net47" />
|
<package id="System.Memory" version="4.5.3" targetFramework="net47" />
|
||||||
<package id="System.Numerics.Vectors" version="4.4.0" targetFramework="net47" />
|
<package id="System.Numerics.Vectors" version="4.4.0" targetFramework="net47" />
|
||||||
<package id="System.Reflection" version="4.3.0" targetFramework="net47" />
|
<package id="System.Reflection" version="4.3.0" targetFramework="net47" />
|
||||||
<package id="System.Reflection.TypeExtensions" version="4.6.0" targetFramework="net47" />
|
<package id="System.Reflection.TypeExtensions" version="4.6.0" targetFramework="net47" requireReinstallation="true" />
|
||||||
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net47" />
|
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net47" />
|
||||||
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net47" />
|
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net47" />
|
||||||
<package id="System.Runtime.Serialization.Primitives" version="4.3.0" targetFramework="net47" />
|
<package id="System.Runtime.Serialization.Primitives" version="4.3.0" targetFramework="net47" />
|
||||||
@ -34,6 +34,7 @@
|
|||||||
<package id="taglib-sharp-netstandard2.0" version="2.1.0" targetFramework="net47" />
|
<package id="taglib-sharp-netstandard2.0" version="2.1.0" targetFramework="net47" />
|
||||||
<package id="VideoLAN.LibVLC.Mac" version="3.1.3.1" targetFramework="net47" />
|
<package id="VideoLAN.LibVLC.Mac" version="3.1.3.1" targetFramework="net47" />
|
||||||
<package id="Xam.Plugins.Settings" version="3.1.1" targetFramework="net47" />
|
<package id="Xam.Plugins.Settings" version="3.1.1" targetFramework="net47" />
|
||||||
<package id="Xamarin.Forms" version="4.3.0.991211" targetFramework="net47" />
|
<package id="Xamarin.Forms" version="5.0.0.2012" targetFramework="net47" />
|
||||||
<package id="Xamarin.Forms.Platform.GTK" version="4.3.0.991211" targetFramework="net47" />
|
<package id="Xamarin.Forms.DataGrid" version="4.8.0" targetFramework="net47" />
|
||||||
|
<package id="Xamarin.Forms.Platform.GTK" version="5.0.0.2012" targetFramework="net47" />
|
||||||
</packages>
|
</packages>
|
@ -1,6 +1,6 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||||
<IsPackable>false</IsPackable>
|
<IsPackable>false</IsPackable>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@ -23,9 +23,6 @@
|
|||||||
<ProjectReference Include="..\Aurora\Aurora.csproj" />
|
<ProjectReference Include="..\Aurora\Aurora.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Update="Resources\Jidenna\The Chief\01 A Bull%27s Tale.mp3">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</None>
|
|
||||||
<None Update="Resources\Jidenna\The Chief\04 Bambi.mp3">
|
<None Update="Resources\Jidenna\The Chief\04 Bambi.mp3">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
@ -56,62 +53,11 @@
|
|||||||
<None Update="Resources\Jidenna\The Chief\06 Long Live The Chief.mp3">
|
<None Update="Resources\Jidenna\The Chief\06 Long Live The Chief.mp3">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
<None Update="Resources\Jidenna\The Chief\02 Chief Don%27t Run.mp3">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</None>
|
|
||||||
<None Update="Resources\Jidenna\The Chief\11 Little Bit More.mp3">
|
<None Update="Resources\Jidenna\The Chief\11 Little Bit More.mp3">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
<None Update="Resources\Jidenna\The Chief\13 White Niggas.mp3">
|
<None Update="Resources\Jidenna\The Chief\13 White Niggas.mp3">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
<None Update="Resources\Mac Miller\Best Day Ever\16 BDE Bonus %28Prod. By_ ID Labs%29.mp3">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</None>
|
|
||||||
<None Update="Resources\Mac Miller\Best Day Ever\11 Play Ya Cards %28Prod By_ Chuck Inglish%29.m4a">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</None>
|
|
||||||
<None Update="Resources\Mac Miller\Best Day Ever\08 All Around The World %28Prod. By_ Just Blaze%29.m4a">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</None>
|
|
||||||
<None Update="Resources\Mac Miller\Best Day Ever\10 In The Air %28Prod By_ Ritz Reynolds%29.m4a">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</None>
|
|
||||||
<None Update="Resources\Mac Miller\Best Day Ever\05 I%27ll Be There %28feat. Phonte%29 %28Prod. By_ Beanz %27n%27 Kornbread%29.mp3">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</None>
|
|
||||||
<None Update="Resources\Mac Miller\Best Day Ever\03 Donald Trump %28Prod. By_ Sap%29.m4a">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</None>
|
|
||||||
<None Update="Resources\Mac Miller\Best Day Ever\13 Life Ain%27t Easy %28Prod. By_ ID Labs%29.m4a">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</None>
|
|
||||||
<None Update="Resources\Mac Miller\Best Day Ever\09 Down The Rabbit Hole %28Prod. By_ Blue of The Sore Losers%29.m4a">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</None>
|
|
||||||
<None Update="Resources\Mac Miller\Best Day Ever\07 Wake Up %28Prod By_ Sap & ID Labs%29.m4a">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</None>
|
|
||||||
<None Update="Resources\Mac Miller\Best Day Ever\04 Oy Vey %28Prod By_ ID Labs%29.mp3">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</None>
|
|
||||||
<None Update="Resources\Mac Miller\Best Day Ever\01 Best Day Ever %28Prod. By_ ID Labs%29.m4a">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</None>
|
|
||||||
<None Update="Resources\Mac Miller\Best Day Ever\02 Get Up %28Prod. By_ Teddy Roxpin%29.m4a">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</None>
|
|
||||||
<None Update="Resources\Mac Miller\Best Day Ever\14 Snooze %28Prod By_ ID Labs%29.m4a">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</None>
|
|
||||||
<None Update="Resources\Mac Miller\Best Day Ever\12 She Said %28Prod By_ Khrysis%29.m4a">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</None>
|
|
||||||
<None Update="Resources\Mac Miller\Best Day Ever\15 Keep Floatin%27 %28feat. Wiz Khalifa%29 %28Prod. By_ ID Labs%29.mp3">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</None>
|
|
||||||
<None Update="Resources\Mac Miller\Best Day Ever\06 Wear My Hat %28Prod. By_ Chuck Inglish%29.m4a">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</None>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
@ -5,11 +5,12 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
<DebugType>pdbonly</DebugType>
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<OutputPath></OutputPath>
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Xamarin.Forms" Version="4.3.0.991211" />
|
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2012" />
|
||||||
<PackageReference Include="Xamarin.Essentials" Version="1.3.1" />
|
<PackageReference Include="Xamarin.Essentials" Version="1.6.1" />
|
||||||
<PackageReference Include="taglib-sharp-netstandard2.0" Version="2.1.0" />
|
<PackageReference Include="taglib-sharp-netstandard2.0" Version="2.1.0" />
|
||||||
<PackageReference Include="LibVLCSharp.Forms" Version="3.3.1" />
|
<PackageReference Include="LibVLCSharp.Forms" Version="3.3.1" />
|
||||||
<PackageReference Include="VideoLAN.LibVLC.Mac" Version="3.1.3.1" />
|
<PackageReference Include="VideoLAN.LibVLC.Mac" Version="3.1.3.1" />
|
||||||
@ -24,6 +25,7 @@
|
|||||||
<PackageReference Include="DLToolkit.Forms.Controls.FlowListView" Version="2.0.11" />
|
<PackageReference Include="DLToolkit.Forms.Controls.FlowListView" Version="2.0.11" />
|
||||||
<PackageReference Include="CarouselView.FormsPlugin" Version="5.2.0" />
|
<PackageReference Include="CarouselView.FormsPlugin" Version="5.2.0" />
|
||||||
<PackageReference Include="Autofac" Version="5.0.0" />
|
<PackageReference Include="Autofac" Version="5.0.0" />
|
||||||
|
<PackageReference Include="Xamarin.Forms.DataGrid" Version="4.8.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Folder Include="Design\" />
|
<Folder Include="Design\" />
|
||||||
@ -43,7 +45,6 @@
|
|||||||
<Folder Include="Design\Components\MemberList\" />
|
<Folder Include="Design\Components\MemberList\" />
|
||||||
<Folder Include="Design\Components\Library\" />
|
<Folder Include="Design\Components\Library\" />
|
||||||
<Folder Include="Design\Views\Profile\" />
|
<Folder Include="Design\Views\Profile\" />
|
||||||
<Folder Include="Design\Components\DataGrid\" />
|
|
||||||
<Folder Include="Resources\" />
|
<Folder Include="Resources\" />
|
||||||
<Folder Include="Design\Extensions\" />
|
<Folder Include="Design\Extensions\" />
|
||||||
<Folder Include="Design\Components\ImageButton\" />
|
<Folder Include="Design\Components\ImageButton\" />
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace Aurora.Design.Components.DataGrid
|
|
||||||
{
|
|
||||||
public sealed class ColumnCollection : List<DataGridColumn>
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,95 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<Grid
|
|
||||||
x:Name="self"
|
|
||||||
xmlns="http://xamarin.com/schemas/2014/forms"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
|
||||||
x:Class="Aurora.Design.Components.DataGrid.DataGrid"
|
|
||||||
Padding="0"
|
|
||||||
RowSpacing="0">
|
|
||||||
<Grid.RowDefinitions>
|
|
||||||
<RowDefinition
|
|
||||||
Height="Auto"/>
|
|
||||||
<RowDefinition
|
|
||||||
Height="*"/>
|
|
||||||
</Grid.RowDefinitions>
|
|
||||||
<Grid
|
|
||||||
x:Name="_headerView"
|
|
||||||
RowSpacing="0">
|
|
||||||
<Grid.Resources>
|
|
||||||
<ResourceDictionary>
|
|
||||||
<!--Default Header Style-->
|
|
||||||
<Style
|
|
||||||
x:Key="HeaderDefaultStyle"
|
|
||||||
TargetType="Label">
|
|
||||||
<Setter
|
|
||||||
Property="FontSize"
|
|
||||||
Value="{Binding HeaderFontSize, Source={x:Reference self}}"/>
|
|
||||||
<Setter
|
|
||||||
Property="FontAttributes"
|
|
||||||
Value="Bold"/>
|
|
||||||
<Setter
|
|
||||||
Property="HorizontalOptions"
|
|
||||||
Value="Center"/>
|
|
||||||
<Setter
|
|
||||||
Property="VerticalOptions"
|
|
||||||
Value="Center"/>
|
|
||||||
<Setter
|
|
||||||
Property="TextColor"
|
|
||||||
Value="{Binding HeaderTextColor,Source={x:Reference self}}"/>
|
|
||||||
<Setter
|
|
||||||
Property="LineBreakMode"
|
|
||||||
Value="WordWrap"/>
|
|
||||||
</Style>
|
|
||||||
<Style
|
|
||||||
TargetType="Grid">
|
|
||||||
<Setter
|
|
||||||
Property="BackgroundColor"
|
|
||||||
Value="{Binding HeaderBackground,Source={x:Reference self}}"/>
|
|
||||||
</Style>
|
|
||||||
<Style
|
|
||||||
x:Key="ImageStyleBase"
|
|
||||||
TargetType="Image">
|
|
||||||
<Setter
|
|
||||||
Property="Aspect"
|
|
||||||
Value="AspectFill"/>
|
|
||||||
<Setter
|
|
||||||
Property="VerticalOptions"
|
|
||||||
Value="Center"/>
|
|
||||||
<Setter
|
|
||||||
Property="HorizontalOptions"
|
|
||||||
Value="Center"/>
|
|
||||||
<Setter
|
|
||||||
Property="HeightRequest"
|
|
||||||
Value="5"/>
|
|
||||||
<Setter
|
|
||||||
Property="WidthRequest"
|
|
||||||
Value="9"/>
|
|
||||||
<Setter
|
|
||||||
Property="Margin"
|
|
||||||
Value="0,0,4,0"/>
|
|
||||||
</Style>
|
|
||||||
<Style
|
|
||||||
x:Key="AscendingIconStyle"
|
|
||||||
TargetType="Image"
|
|
||||||
BasedOn="{StaticResource ImageStyleBase}">
|
|
||||||
<Setter
|
|
||||||
Property="Source"
|
|
||||||
Value="{Binding AscendingIcon, Source={x:Reference self}}"/>
|
|
||||||
</Style>
|
|
||||||
<Style
|
|
||||||
x:Key="DescendingIconStyle"
|
|
||||||
TargetType="Image"
|
|
||||||
BasedOn="{StaticResource ImageStyleBase}">
|
|
||||||
<Setter
|
|
||||||
Property="Source"
|
|
||||||
Value="{Binding DescendingIcon, Source={x:Reference self}}"/>
|
|
||||||
</Style>
|
|
||||||
</ResourceDictionary>
|
|
||||||
</Grid.Resources>
|
|
||||||
</Grid>
|
|
||||||
<ListView x:Name="DataList" Grid.Row="1" BackgroundColor="#222222" />
|
|
||||||
<ContentView
|
|
||||||
x:Name="_noDataView"
|
|
||||||
Grid.RowSpan="2"
|
|
||||||
IsVisible="False"/>
|
|
||||||
</Grid>
|
|
@ -1,756 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.Specialized;
|
|
||||||
using System.Collections.ObjectModel;
|
|
||||||
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
|
|
||||||
{
|
|
||||||
#region Private Fields
|
|
||||||
private ObservableCollection<object> _internalItems;
|
|
||||||
|
|
||||||
private Dictionary<int, SortingOrder> _sortingOrders;
|
|
||||||
|
|
||||||
#endregion Fields
|
|
||||||
|
|
||||||
#region Constructor
|
|
||||||
|
|
||||||
public DataGrid() : this(ListViewCachingStrategy.RetainElement)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public DataGrid(ListViewCachingStrategy cachingStrategy)
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
BackgroundColor = Color.Transparent;
|
|
||||||
|
|
||||||
_sortingOrders = new Dictionary<int, SortingOrder>();
|
|
||||||
|
|
||||||
DataList.ItemTemplate = new DataGridRowTemplateSelector();
|
|
||||||
|
|
||||||
DataList.ItemSelected += (s, e) =>
|
|
||||||
{
|
|
||||||
if (SelectionEnabled)
|
|
||||||
{
|
|
||||||
SelectedItem = DataList.SelectedItem;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DataList.SelectedItem = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
ItemSelected?.Invoke(this, e);
|
|
||||||
};
|
|
||||||
|
|
||||||
DataList.Refreshing += (s, e) =>
|
|
||||||
{
|
|
||||||
Refreshing?.Invoke(this, e);
|
|
||||||
};
|
|
||||||
|
|
||||||
DataList.SetBinding(ListView.RowHeightProperty, new Binding("RowHeight", source: this));
|
|
||||||
}
|
|
||||||
#endregion Constructor
|
|
||||||
|
|
||||||
#region Public Fields
|
|
||||||
public event EventHandler Refreshing;
|
|
||||||
public event EventHandler<SelectedItemChangedEventArgs> ItemSelected;
|
|
||||||
|
|
||||||
#endregion Public Fields
|
|
||||||
|
|
||||||
#region Bindable properties
|
|
||||||
public static readonly BindableProperty ActiveRowColorProperty =
|
|
||||||
BindableProperty.Create(
|
|
||||||
nameof(ActiveRowColor),
|
|
||||||
typeof(Color),
|
|
||||||
typeof(DataGrid),
|
|
||||||
Color.FromRgb(128, 144, 160),
|
|
||||||
coerceValue: (bindable, value) =>
|
|
||||||
{
|
|
||||||
if (!(bindable as DataGrid).SelectionEnabled)
|
|
||||||
throw new InvalidOperationException("Datagrid must be SelectionEnabled=true to set ActiveRowColor");
|
|
||||||
return value;
|
|
||||||
});
|
|
||||||
|
|
||||||
public static readonly BindableProperty HeaderBackgroundProperty =
|
|
||||||
BindableProperty.Create(
|
|
||||||
nameof(HeaderBackground),
|
|
||||||
typeof(Color),
|
|
||||||
typeof(DataGrid),
|
|
||||||
Color.White,
|
|
||||||
propertyChanged: (bindable, oldValue, newValue) =>
|
|
||||||
{
|
|
||||||
var self = bindable as DataGrid;
|
|
||||||
if (self._headerView != null && !self.HeaderBordersVisible)
|
|
||||||
self._headerView.BackgroundColor = (Color)newValue;
|
|
||||||
});
|
|
||||||
|
|
||||||
public static readonly BindableProperty BorderColorProperty =
|
|
||||||
BindableProperty.Create(
|
|
||||||
nameof(BorderColor),
|
|
||||||
typeof(Color),
|
|
||||||
typeof(DataGrid),
|
|
||||||
Color.Black,
|
|
||||||
propertyChanged: (bindable, oldValue, newValue) =>
|
|
||||||
{
|
|
||||||
var self = bindable as DataGrid;
|
|
||||||
if (self.HeaderBordersVisible)
|
|
||||||
self._headerView.BackgroundColor = (Color)newValue;
|
|
||||||
|
|
||||||
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: (bindable, oldValue, newValue) =>
|
|
||||||
{
|
|
||||||
var self = bindable 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: (bindable, oldValue, newValue) =>
|
|
||||||
{
|
|
||||||
var self = bindable 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: (bindable, oldValue, newValue) =>
|
|
||||||
{
|
|
||||||
(bindable as DataGrid).InitHeaderView();
|
|
||||||
},
|
|
||||||
defaultValueCreator: bindable => { return new ColumnCollection(); }
|
|
||||||
);
|
|
||||||
|
|
||||||
public static BindableProperty ItemsSourceProperty =
|
|
||||||
BindableProperty.Create(
|
|
||||||
propertyName: nameof(ItemsSource),
|
|
||||||
returnType: typeof(IEnumerable),
|
|
||||||
declaringType: typeof(DataGrid),
|
|
||||||
defaultBindingMode: BindingMode.TwoWay,
|
|
||||||
propertyChanged: (bindable, oldValue, newValue) =>
|
|
||||||
{
|
|
||||||
DataGrid self = bindable as DataGrid;
|
|
||||||
//ObservableCollection Tracking
|
|
||||||
if (oldValue != null && oldValue is INotifyCollectionChanged)
|
|
||||||
{
|
|
||||||
(oldValue as INotifyCollectionChanged).CollectionChanged -= self.HandleItemsSourceCollectionChanged;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (newValue != null && newValue is INotifyCollectionChanged)
|
|
||||||
{
|
|
||||||
(newValue as INotifyCollectionChanged).CollectionChanged += self.HandleItemsSourceCollectionChanged;
|
|
||||||
|
|
||||||
self.InternalItems = new ObservableCollection<object>(((IEnumerable<object>)newValue));
|
|
||||||
//Assign listview item source
|
|
||||||
self.DataList.ItemsSource = self.InternalItems;
|
|
||||||
self.DataList.SetBinding(ListView.ItemsSourceProperty, new Binding("ItemsSource", source: self));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (self.SelectedItem != null && !self.InternalItems.Contains(self.SelectedItem))
|
|
||||||
{
|
|
||||||
self.SelectedItem = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (self.NoDataView != null)
|
|
||||||
{
|
|
||||||
if (self.ItemsSource == null || self.InternalItems.Count() == 0)
|
|
||||||
{
|
|
||||||
self._noDataView.IsVisible = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (self._noDataView.IsVisible)
|
|
||||||
{
|
|
||||||
self._noDataView.IsVisible = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
private void HandleItemsSourceCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (e.NewItems != null)
|
|
||||||
{
|
|
||||||
foreach (object item in e.NewItems)
|
|
||||||
{
|
|
||||||
InternalItems.Add(item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (e.OldItems != null)
|
|
||||||
{
|
|
||||||
foreach (object item in e.OldItems)
|
|
||||||
{
|
|
||||||
InternalItems.Remove(item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (SelectedItem != null && !InternalItems.Contains(SelectedItem))
|
|
||||||
{
|
|
||||||
SelectedItem = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static readonly BindableProperty RowHeightProperty =
|
|
||||||
BindableProperty.Create(nameof(RowHeight), typeof(int), typeof(DataGrid), 40,
|
|
||||||
propertyChanged: (bindable, oldValue, newValue) =>
|
|
||||||
{
|
|
||||||
var self = bindable as DataGrid;
|
|
||||||
self.DataList.RowHeight = (int)newValue;
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
public static readonly BindableProperty HeaderHeightProperty =
|
|
||||||
BindableProperty.Create(nameof(HeaderHeight), typeof(int), typeof(DataGrid), 40,
|
|
||||||
propertyChanged: (bindable, oldValue, newValue) =>
|
|
||||||
{
|
|
||||||
var self = bindable as DataGrid;
|
|
||||||
self._headerView.HeightRequest = (int)newValue;
|
|
||||||
});
|
|
||||||
|
|
||||||
public static readonly BindableProperty IsSortableProperty =
|
|
||||||
BindableProperty.Create(nameof(IsSortable), typeof(bool), typeof(DataGrid), true);
|
|
||||||
|
|
||||||
public static readonly BindableProperty FontSizeProperty =
|
|
||||||
BindableProperty.Create(nameof(FontSize), typeof(double), typeof(DataGrid), 13.0);
|
|
||||||
|
|
||||||
public static readonly BindableProperty FontFamilyProperty =
|
|
||||||
BindableProperty.Create(
|
|
||||||
nameof(FontFamily),
|
|
||||||
typeof(string),
|
|
||||||
typeof(DataGrid),
|
|
||||||
Font.Default.FontFamily);
|
|
||||||
|
|
||||||
public static readonly BindableProperty SelectedItemProperty =
|
|
||||||
BindableProperty.Create(
|
|
||||||
nameof(SelectedItem),
|
|
||||||
typeof(object),
|
|
||||||
typeof(DataGrid),
|
|
||||||
null,
|
|
||||||
BindingMode.TwoWay,
|
|
||||||
coerceValue: (bindable, value) =>
|
|
||||||
{
|
|
||||||
var self = bindable as DataGrid;
|
|
||||||
if (!self.SelectionEnabled && value != null)
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException("Datagrid must be SelectionEnabled=true to set SelectedItem");
|
|
||||||
}
|
|
||||||
if (self.InternalItems != null && self.InternalItems.Contains(value))
|
|
||||||
{
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
propertyChanged: (bindable, oldValue, newValue) =>
|
|
||||||
{
|
|
||||||
var self = bindable as DataGrid;
|
|
||||||
if (self.DataList.SelectedItem != newValue)
|
|
||||||
{
|
|
||||||
self.DataList.SelectedItem = newValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
public static readonly BindableProperty SelectionEnabledProperty =
|
|
||||||
BindableProperty.Create(nameof(SelectionEnabled), typeof(bool), typeof(DataGrid), true,
|
|
||||||
propertyChanged: (bindable, oldValue, newValue) =>
|
|
||||||
{
|
|
||||||
var self = bindable as DataGrid;
|
|
||||||
if (!self.SelectionEnabled && self.SelectedItem != null)
|
|
||||||
{
|
|
||||||
self.SelectedItem = null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
public static readonly BindableProperty PullToRefreshCommandProperty =
|
|
||||||
BindableProperty.Create(nameof(PullToRefreshCommand), typeof(ICommand), typeof(DataGrid), null,
|
|
||||||
propertyChanged: (bindable, oldValue, newValue) =>
|
|
||||||
{
|
|
||||||
var self = bindable as DataGrid;
|
|
||||||
if (newValue == null)
|
|
||||||
{
|
|
||||||
self.DataList.IsPullToRefreshEnabled = false;
|
|
||||||
self.DataList.RefreshCommand = null;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
self.DataList.IsPullToRefreshEnabled = true;
|
|
||||||
self.DataList.RefreshCommand = newValue as ICommand;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
public static readonly BindableProperty IsRefreshingProperty =
|
|
||||||
BindableProperty.Create(
|
|
||||||
nameof(IsRefreshing),
|
|
||||||
typeof(bool),
|
|
||||||
typeof(DataGrid),
|
|
||||||
false,
|
|
||||||
BindingMode.TwoWay,
|
|
||||||
propertyChanged: (bindable, oldValue, newValue) =>
|
|
||||||
{
|
|
||||||
(bindable as DataGrid).DataList.IsRefreshing = (bool)newValue;
|
|
||||||
});
|
|
||||||
|
|
||||||
public static readonly BindableProperty BorderThicknessProperty =
|
|
||||||
BindableProperty.Create(
|
|
||||||
nameof(BorderThickness),
|
|
||||||
typeof(Thickness),
|
|
||||||
typeof(DataGrid),
|
|
||||||
new Thickness(1),
|
|
||||||
propertyChanged: (bindable, oldValue, newValue) =>
|
|
||||||
{
|
|
||||||
(bindable as DataGrid)._headerView.ColumnSpacing = ((Thickness)newValue).HorizontalThickness / 2;
|
|
||||||
(bindable as DataGrid)._headerView.Padding = ((Thickness)newValue).HorizontalThickness / 2;
|
|
||||||
});
|
|
||||||
|
|
||||||
public static readonly BindableProperty HeaderBordersVisibleProperty =
|
|
||||||
BindableProperty.Create(
|
|
||||||
nameof(HeaderBordersVisible),
|
|
||||||
typeof(bool),
|
|
||||||
typeof(DataGrid),
|
|
||||||
true,
|
|
||||||
propertyChanged: (bindable, oldValue, newValue) => (bindable as DataGrid)._headerView.BackgroundColor = (bool)newValue ? (bindable as DataGrid).BorderColor : (bindable as DataGrid).HeaderBackground);
|
|
||||||
|
|
||||||
public static readonly BindableProperty SortedColumnIndexProperty =
|
|
||||||
BindableProperty.Create(
|
|
||||||
nameof(SortedColumnIndex),
|
|
||||||
typeof(SortData),
|
|
||||||
typeof(DataGrid),
|
|
||||||
null,
|
|
||||||
BindingMode.TwoWay,
|
|
||||||
validateValue: (bindable, v) =>
|
|
||||||
{
|
|
||||||
var self = bindable as DataGrid;
|
|
||||||
var sData = (SortData)v;
|
|
||||||
|
|
||||||
return
|
|
||||||
sData == null || //setted to null
|
|
||||||
self.Columns == null || // Columns binded but not setted
|
|
||||||
self.Columns.Count == 0 || //columns not setted yet
|
|
||||||
(sData.Index < self.Columns.Count && self.Columns.ElementAt(sData.Index).SortingEnabled);
|
|
||||||
},
|
|
||||||
propertyChanged: (bindable, oldValue, newValue) =>
|
|
||||||
{
|
|
||||||
var self = bindable as DataGrid;
|
|
||||||
if (oldValue != newValue)
|
|
||||||
self.SortItems((SortData)newValue);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
public static readonly BindableProperty HeaderLabelStyleProperty =
|
|
||||||
BindableProperty.Create(nameof(HeaderLabelStyle), typeof(Style), typeof(DataGrid));
|
|
||||||
|
|
||||||
public static readonly BindableProperty AscendingIconProperty =
|
|
||||||
BindableProperty.Create(
|
|
||||||
nameof(AscendingIcon),
|
|
||||||
typeof(ImageSource),
|
|
||||||
typeof(DataGrid),
|
|
||||||
ImageSource.FromResource("Xamarin.Forms.DataGrid.up.png",
|
|
||||||
typeof(DataGrid).GetTypeInfo().Assembly));
|
|
||||||
|
|
||||||
public static readonly BindableProperty DescendingIconProperty =
|
|
||||||
BindableProperty.Create(
|
|
||||||
nameof(DescendingIcon),
|
|
||||||
typeof(ImageSource),
|
|
||||||
typeof(DataGrid),
|
|
||||||
ImageSource.FromResource("Xamarin.Forms.DataGrid.down.png",
|
|
||||||
typeof(DataGrid).GetTypeInfo().Assembly));
|
|
||||||
|
|
||||||
public static readonly BindableProperty DescendingIconStyleProperty =
|
|
||||||
BindableProperty.Create(nameof(DescendingIconStyle), typeof(Style), typeof(DataGrid), null,
|
|
||||||
|
|
||||||
propertyChanged: (bindable, oldValue, newValue) =>
|
|
||||||
{
|
|
||||||
var self = bindable as DataGrid;
|
|
||||||
var style = (newValue as Style).Setters.FirstOrDefault(x => x.Property == Image.SourceProperty);
|
|
||||||
if (style != null)
|
|
||||||
{
|
|
||||||
if (style.Value is string vs)
|
|
||||||
self.DescendingIcon = ImageSource.FromFile(vs);
|
|
||||||
else
|
|
||||||
self.DescendingIcon = (ImageSource)style.Value;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
public static readonly BindableProperty AscendingIconStyleProperty =
|
|
||||||
BindableProperty.Create(nameof(AscendingIconStyle), typeof(Style), typeof(DataGrid), null,
|
|
||||||
coerceValue: (bindable, v) =>
|
|
||||||
{
|
|
||||||
var self = bindable as DataGrid;
|
|
||||||
|
|
||||||
return v;
|
|
||||||
},
|
|
||||||
|
|
||||||
propertyChanged: (bindable, oldValue, newValue) =>
|
|
||||||
{
|
|
||||||
var self = bindable as DataGrid;
|
|
||||||
if ((newValue as Style).Setters.Any(x => x.Property == Image.SourceProperty))
|
|
||||||
{
|
|
||||||
var style = (newValue as Style).Setters.FirstOrDefault(x => x.Property == Image.SourceProperty);
|
|
||||||
if (style != null)
|
|
||||||
{
|
|
||||||
if (style.Value is string vs)
|
|
||||||
self.AscendingIcon = ImageSource.FromFile(vs);
|
|
||||||
else
|
|
||||||
self.AscendingIcon = (ImageSource)style.Value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
public static readonly BindableProperty NoDataViewProperty =
|
|
||||||
BindableProperty.Create(nameof(NoDataView), typeof(View), typeof(DataGrid),
|
|
||||||
propertyChanged: (bindable, oldValue, newValue) =>
|
|
||||||
{
|
|
||||||
if (oldValue != newValue)
|
|
||||||
(bindable as DataGrid)._noDataView.Content = newValue as View;
|
|
||||||
});
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Properties
|
|
||||||
public Color ActiveRowColor
|
|
||||||
{
|
|
||||||
get { return (Color)GetValue(ActiveRowColorProperty); }
|
|
||||||
set { SetValue(ActiveRowColorProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public Color HeaderBackground
|
|
||||||
{
|
|
||||||
get { return (Color)GetValue(HeaderBackgroundProperty); }
|
|
||||||
set { SetValue(HeaderBackgroundProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
[Obsolete("Please use HeaderLabelStyle", true)]
|
|
||||||
public Color HeaderTextColor
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Color BorderColor
|
|
||||||
{
|
|
||||||
get { return (Color)GetValue(BorderColorProperty); }
|
|
||||||
set { SetValue(BorderColorProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public IColorProvider RowsBackgroundColorPalette
|
|
||||||
{
|
|
||||||
get { return (IColorProvider)GetValue(RowsBackgroundColorPaletteProperty); }
|
|
||||||
set { SetValue(RowsBackgroundColorPaletteProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public IColorProvider RowsTextColorPalette
|
|
||||||
{
|
|
||||||
get { return (IColorProvider)GetValue(RowsTextColorPaletteProperty); }
|
|
||||||
set { SetValue(RowsTextColorPaletteProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public IEnumerable ItemsSource
|
|
||||||
{
|
|
||||||
get { return (IEnumerable)GetValue(ItemsSourceProperty); }
|
|
||||||
set { SetValue(ItemsSourceProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
internal ObservableCollection<object> InternalItems
|
|
||||||
{
|
|
||||||
get { return _internalItems; }
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _internalItems)
|
|
||||||
{
|
|
||||||
_internalItems = value;
|
|
||||||
if (IsSortable && SortedColumnIndex != null)
|
|
||||||
{
|
|
||||||
SortItems(SortedColumnIndex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
DataList.ItemsSource = _internalItems;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public ColumnCollection Columns
|
|
||||||
{
|
|
||||||
get { return (ColumnCollection)GetValue(ColumnsProperty); }
|
|
||||||
set { SetValue(ColumnsProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public double FontSize
|
|
||||||
{
|
|
||||||
get { return (double)GetValue(FontSizeProperty); }
|
|
||||||
set { SetValue(FontSizeProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
[Obsolete("Please use HeaderLabelStyle", true)]
|
|
||||||
public double HeaderFontSize
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string FontFamily
|
|
||||||
{
|
|
||||||
get { return (string)GetValue(FontFamilyProperty); }
|
|
||||||
set { SetValue(FontFamilyProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public int RowHeight
|
|
||||||
{
|
|
||||||
get { return (int)GetValue(RowHeightProperty); }
|
|
||||||
set { SetValue(RowHeightProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public int HeaderHeight
|
|
||||||
{
|
|
||||||
get { return (int)GetValue(HeaderHeightProperty); }
|
|
||||||
set { SetValue(HeaderHeightProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsSortable
|
|
||||||
{
|
|
||||||
get { return (bool)GetValue(IsSortableProperty); }
|
|
||||||
set { SetValue(IsSortableProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool SelectionEnabled
|
|
||||||
{
|
|
||||||
get { return (bool)GetValue(SelectionEnabledProperty); }
|
|
||||||
set { SetValue(SelectionEnabledProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public object SelectedItem
|
|
||||||
{
|
|
||||||
get { return GetValue(SelectedItemProperty); }
|
|
||||||
set { SetValue(SelectedItemProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public ICommand PullToRefreshCommand
|
|
||||||
{
|
|
||||||
get { return (ICommand)GetValue(PullToRefreshCommandProperty); }
|
|
||||||
set { SetValue(PullToRefreshCommandProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsRefreshing
|
|
||||||
{
|
|
||||||
get { return (bool)GetValue(IsRefreshingProperty); }
|
|
||||||
set { SetValue(IsRefreshingProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public Thickness BorderThickness
|
|
||||||
{
|
|
||||||
get { return (Thickness)GetValue(BorderThicknessProperty); }
|
|
||||||
set { SetValue(BorderThicknessProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool HeaderBordersVisible
|
|
||||||
{
|
|
||||||
get { return (bool)GetValue(HeaderBordersVisibleProperty); }
|
|
||||||
set { SetValue(HeaderBordersVisibleProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public SortData SortedColumnIndex
|
|
||||||
{
|
|
||||||
get { return (SortData)GetValue(SortedColumnIndexProperty); }
|
|
||||||
set { SetValue(SortedColumnIndexProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public Style HeaderLabelStyle
|
|
||||||
{
|
|
||||||
get { return (Style)GetValue(HeaderLabelStyleProperty); }
|
|
||||||
set { SetValue(HeaderLabelStyleProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public ImageSource AscendingIcon
|
|
||||||
{
|
|
||||||
get { return (ImageSource)GetValue(AscendingIconProperty); }
|
|
||||||
set { SetValue(AscendingIconProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public ImageSource DescendingIcon
|
|
||||||
{
|
|
||||||
get { return (ImageSource)GetValue(DescendingIconProperty); }
|
|
||||||
set { SetValue(DescendingIconProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public Style AscendingIconStyle
|
|
||||||
{
|
|
||||||
get { return (Style)GetValue(AscendingIconStyleProperty); }
|
|
||||||
set { SetValue(AscendingIconStyleProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public Style DescendingIconStyle
|
|
||||||
{
|
|
||||||
get { return (Style)GetValue(DescendingIconStyleProperty); }
|
|
||||||
set { SetValue(DescendingIconStyleProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public View NoDataView
|
|
||||||
{
|
|
||||||
get { return (View)GetValue(NoDataViewProperty); }
|
|
||||||
set { SetValue(NoDataViewProperty, value); }
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region UI Methods
|
|
||||||
protected override void OnParentSet()
|
|
||||||
{
|
|
||||||
base.OnParentSet();
|
|
||||||
InitHeaderView();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnBindingContextChanged()
|
|
||||||
{
|
|
||||||
base.OnBindingContextChanged();
|
|
||||||
SetColumnsBindingContext();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Private Methods
|
|
||||||
|
|
||||||
private void Reload()
|
|
||||||
{
|
|
||||||
InternalItems = new ObservableCollection<object>(_internalItems);
|
|
||||||
}
|
|
||||||
private void SortItems(SortData sData)
|
|
||||||
{
|
|
||||||
if (InternalItems == null || sData.Index >= Columns.Count || !Columns[sData.Index].SortingEnabled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
var items = InternalItems;
|
|
||||||
var column = Columns[sData.Index];
|
|
||||||
SortingOrder order = sData.Order;
|
|
||||||
|
|
||||||
if (!IsSortable)
|
|
||||||
throw new InvalidOperationException("This DataGrid is not sortable");
|
|
||||||
else if (column.PropertyName == null)
|
|
||||||
throw new InvalidOperationException("Please set the PropertyName property of Column");
|
|
||||||
|
|
||||||
//Sort
|
|
||||||
// if (order == SortingOrder.Descendant)
|
|
||||||
// items = items.OrderByDescending(x => ReflectionUtils.GetValueByPath(x, column.PropertyName)).ToList();
|
|
||||||
// else
|
|
||||||
// items = items.OrderBy(x => ReflectionUtils.GetValueByPath(x, column.PropertyName)).ToList();
|
|
||||||
|
|
||||||
column.SortingIcon.Style = (order == SortingOrder.Descendant) ?
|
|
||||||
AscendingIconStyle ?? (Style)_headerView.Resources["DescendingIconStyle"] :
|
|
||||||
DescendingIconStyle ?? (Style)_headerView.Resources["AscendingIconStyle"];
|
|
||||||
|
|
||||||
//Support DescendingIcon property (if setted)
|
|
||||||
if (!column.SortingIcon.Style.Setters.Any(x => x.Property == Image.SourceProperty))
|
|
||||||
{
|
|
||||||
if (order == SortingOrder.Descendant && DescendingIconProperty.DefaultValue != DescendingIcon)
|
|
||||||
column.SortingIcon.Source = DescendingIcon;
|
|
||||||
if (order == SortingOrder.Ascendant && AscendingIconProperty.DefaultValue != AscendingIcon)
|
|
||||||
column.SortingIcon.Source = AscendingIcon;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < Columns.Count; i++)
|
|
||||||
{
|
|
||||||
if (i != sData.Index)
|
|
||||||
{
|
|
||||||
if (Columns[i].SortingIcon.Style != null)
|
|
||||||
Columns[i].SortingIcon.Style = null;
|
|
||||||
if (Columns[i].SortingIcon.Source != null)
|
|
||||||
Columns[i].SortingIcon.Source = null;
|
|
||||||
_sortingOrders[i] = SortingOrder.None;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_internalItems = items;
|
|
||||||
|
|
||||||
_sortingOrders[sData.Index] = order;
|
|
||||||
SortedColumnIndex = sData;
|
|
||||||
}
|
|
||||||
|
|
||||||
private View GetHeaderViewForColumn(DataGridColumn column)
|
|
||||||
{
|
|
||||||
column.HeaderLabel.Style = column.HeaderLabelStyle ?? this.HeaderLabelStyle ?? (Style)_headerView.Resources["HeaderDefaultStyle"];
|
|
||||||
|
|
||||||
Grid grid = new Grid
|
|
||||||
{
|
|
||||||
ColumnSpacing = 0,
|
|
||||||
};
|
|
||||||
|
|
||||||
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
|
|
||||||
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Auto) });
|
|
||||||
|
|
||||||
if (IsSortable)
|
|
||||||
{
|
|
||||||
column.SortingIcon.Style = (Style)_headerView.Resources["ImageStyleBase"];
|
|
||||||
|
|
||||||
grid.Children.Add(column.SortingIcon);
|
|
||||||
Grid.SetColumn(column.SortingIcon, 1);
|
|
||||||
|
|
||||||
TapGestureRecognizer tgr = new TapGestureRecognizer();
|
|
||||||
tgr.Tapped += (s, e) =>
|
|
||||||
{
|
|
||||||
int index = Columns.IndexOf(column);
|
|
||||||
SortingOrder order = _sortingOrders[index] == SortingOrder.Ascendant ? SortingOrder.Descendant : SortingOrder.Ascendant;
|
|
||||||
|
|
||||||
if (Columns.ElementAt(index).SortingEnabled)
|
|
||||||
SortedColumnIndex = new SortData(index, order);
|
|
||||||
};
|
|
||||||
grid.GestureRecognizers.Add(tgr);
|
|
||||||
}
|
|
||||||
|
|
||||||
grid.Children.Add(column.HeaderLabel);
|
|
||||||
|
|
||||||
return grid;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void InitHeaderView()
|
|
||||||
{
|
|
||||||
SetColumnsBindingContext();
|
|
||||||
_headerView.Children.Clear();
|
|
||||||
_headerView.ColumnDefinitions.Clear();
|
|
||||||
_sortingOrders.Clear();
|
|
||||||
|
|
||||||
_headerView.Padding = new Thickness(BorderThickness.Left, BorderThickness.Top, BorderThickness.Right, 0);
|
|
||||||
_headerView.ColumnSpacing = BorderThickness.HorizontalThickness / 2;
|
|
||||||
|
|
||||||
if (Columns != null)
|
|
||||||
{
|
|
||||||
foreach (var col in Columns)
|
|
||||||
{
|
|
||||||
_headerView.ColumnDefinitions.Add(new ColumnDefinition { Width = col.Width });
|
|
||||||
|
|
||||||
var cell = GetHeaderViewForColumn(col);
|
|
||||||
|
|
||||||
_headerView.Children.Add(cell);
|
|
||||||
Grid.SetColumn(cell, Columns.IndexOf(col));
|
|
||||||
|
|
||||||
_sortingOrders.Add(Columns.IndexOf(col), SortingOrder.None);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SetColumnsBindingContext()
|
|
||||||
{
|
|
||||||
if (Columns != null)
|
|
||||||
foreach (var c in Columns)
|
|
||||||
c.BindingContext = BindingContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Private Methods
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,135 +0,0 @@
|
|||||||
using System;
|
|
||||||
using Xamarin.Forms;
|
|
||||||
|
|
||||||
namespace Aurora.Design.Components.DataGrid
|
|
||||||
{
|
|
||||||
public class DataGridColumn : BindableObject, IDefinition
|
|
||||||
{
|
|
||||||
#region bindable properties
|
|
||||||
public static readonly BindableProperty WidthProperty =
|
|
||||||
BindableProperty.Create(nameof(Width), typeof(GridLength), typeof(DataGridColumn), new GridLength(1, GridUnitType.Star),
|
|
||||||
propertyChanged: (bindable, oldValue, newValue) =>
|
|
||||||
{
|
|
||||||
if (oldValue != newValue)
|
|
||||||
{
|
|
||||||
(bindable as DataGridColumn).OnSizeChanged();
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
public static readonly BindableProperty TitleProperty =
|
|
||||||
BindableProperty.Create(nameof(Title), typeof(string), typeof(DataGridColumn), string.Empty,
|
|
||||||
propertyChanged: (b, o, n) => (b as DataGridColumn).HeaderLabel.Text = (string)n);
|
|
||||||
|
|
||||||
public static readonly BindableProperty FormattedTitleProperty =
|
|
||||||
BindableProperty.Create(nameof(FormattedTitle), typeof(FormattedString), typeof(DataGridColumn),
|
|
||||||
propertyChanged: (b, o, n) => (b as DataGridColumn).HeaderLabel.FormattedText = (FormattedString)n);
|
|
||||||
|
|
||||||
public static readonly BindableProperty PropertyNameProperty =
|
|
||||||
BindableProperty.Create(nameof(PropertyName), typeof(string), typeof(DataGridColumn), null);
|
|
||||||
|
|
||||||
public static readonly BindableProperty StringFormatProperty =
|
|
||||||
BindableProperty.Create(nameof(StringFormat), typeof(string), typeof(DataGridColumn), null);
|
|
||||||
|
|
||||||
public static readonly BindableProperty CellTemplateProperty =
|
|
||||||
BindableProperty.Create(nameof(CellTemplate), typeof(DataTemplate), typeof(DataGridColumn), null);
|
|
||||||
|
|
||||||
public static readonly BindableProperty HorizontalContentAlignmentProperty =
|
|
||||||
BindableProperty.Create(nameof(HorizontalContentAlignment), typeof(LayoutOptions), typeof(DataGridColumn), LayoutOptions.Center);
|
|
||||||
|
|
||||||
public static readonly BindableProperty VerticalContentAlignmentProperty =
|
|
||||||
BindableProperty.Create(nameof(VerticalContentAlignment), typeof(LayoutOptions), typeof(DataGridColumn), LayoutOptions.Center);
|
|
||||||
|
|
||||||
public static readonly BindableProperty SortingEnabledProperty =
|
|
||||||
BindableProperty.Create(nameof(SortingEnabled), typeof(bool), typeof(DataGridColumn), true);
|
|
||||||
|
|
||||||
public static readonly BindableProperty HeaderLabelStyleProperty =
|
|
||||||
BindableProperty.Create(nameof(HeaderLabelStyle), typeof(Style), typeof(DataGridColumn),
|
|
||||||
propertyChanged: (b, o, n) =>
|
|
||||||
{
|
|
||||||
if ((b as DataGridColumn).HeaderLabel != null && (o != n))
|
|
||||||
(b as DataGridColumn).HeaderLabel.Style = n as Style;
|
|
||||||
});
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region properties
|
|
||||||
|
|
||||||
public GridLength Width
|
|
||||||
{
|
|
||||||
get { return (GridLength)GetValue(WidthProperty); }
|
|
||||||
set { SetValue(WidthProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Title
|
|
||||||
{
|
|
||||||
get { return (string)GetValue(TitleProperty); }
|
|
||||||
set { SetValue(TitleProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public FormattedString FormattedTitle
|
|
||||||
{
|
|
||||||
get { return (string)GetValue(FormattedTitleProperty); }
|
|
||||||
set { SetValue(FormattedTitleProperty, value); }
|
|
||||||
}
|
|
||||||
public string PropertyName
|
|
||||||
{
|
|
||||||
get { return (string)GetValue(PropertyNameProperty); }
|
|
||||||
set { SetValue(PropertyNameProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public string StringFormat
|
|
||||||
{
|
|
||||||
get { return (string)GetValue(StringFormatProperty); }
|
|
||||||
set { SetValue(StringFormatProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public DataTemplate CellTemplate
|
|
||||||
{
|
|
||||||
get { return (DataTemplate)GetValue(CellTemplateProperty); }
|
|
||||||
set { SetValue(CellTemplateProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
internal Image SortingIcon { get; set; }
|
|
||||||
internal Label HeaderLabel { get; set; }
|
|
||||||
|
|
||||||
public LayoutOptions HorizontalContentAlignment
|
|
||||||
{
|
|
||||||
get { return (LayoutOptions)GetValue(HorizontalContentAlignmentProperty); }
|
|
||||||
set { SetValue(HorizontalContentAlignmentProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public LayoutOptions VerticalContentAlignment
|
|
||||||
{
|
|
||||||
get { return (LayoutOptions)GetValue(VerticalContentAlignmentProperty); }
|
|
||||||
set { SetValue(VerticalContentAlignmentProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool SortingEnabled
|
|
||||||
{
|
|
||||||
get { return (bool)GetValue(SortingEnabledProperty); }
|
|
||||||
set { SetValue(SortingEnabledProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public Style HeaderLabelStyle
|
|
||||||
{
|
|
||||||
get { return (Style)GetValue(HeaderLabelStyleProperty); }
|
|
||||||
set { SetValue(HeaderLabelStyleProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
public event EventHandler SizeChanged;
|
|
||||||
|
|
||||||
public DataGridColumn()
|
|
||||||
{
|
|
||||||
HeaderLabel = new Label();
|
|
||||||
SortingIcon = new Image();
|
|
||||||
}
|
|
||||||
|
|
||||||
void OnSizeChanged()
|
|
||||||
{
|
|
||||||
SizeChanged?.Invoke(this, EventArgs.Empty);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,30 +0,0 @@
|
|||||||
using Xamarin.Forms;
|
|
||||||
namespace Aurora.Design.Components.DataGrid
|
|
||||||
{
|
|
||||||
internal class DataGridRowTemplateSelector : DataTemplateSelector
|
|
||||||
{
|
|
||||||
private static DataTemplate _dataGridRowTemplate;
|
|
||||||
|
|
||||||
public DataGridRowTemplateSelector()
|
|
||||||
{
|
|
||||||
_dataGridRowTemplate = new DataTemplate(typeof(DataGridViewCell));
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
|
|
||||||
{
|
|
||||||
ListView listView = container as ListView;
|
|
||||||
DataGrid dataGrid = listView.Parent as DataGrid;
|
|
||||||
var items = dataGrid.InternalItems;
|
|
||||||
|
|
||||||
_dataGridRowTemplate.SetValue(DataGridViewCell.DataGridProperty, dataGrid);
|
|
||||||
_dataGridRowTemplate.SetValue(DataGridViewCell.RowContextProperty, item);
|
|
||||||
|
|
||||||
if (items != null)
|
|
||||||
{
|
|
||||||
_dataGridRowTemplate.SetValue(DataGridViewCell.IndexProperty, items.IndexOf(item));
|
|
||||||
}
|
|
||||||
|
|
||||||
return _dataGridRowTemplate;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,163 +0,0 @@
|
|||||||
using Xamarin.Forms;
|
|
||||||
namespace Aurora.Design.Components.DataGrid
|
|
||||||
{
|
|
||||||
internal sealed class DataGridViewCell : ViewCell
|
|
||||||
{
|
|
||||||
#region Fields
|
|
||||||
Grid _mainLayout;
|
|
||||||
Color _bgColor;
|
|
||||||
Color _textColor;
|
|
||||||
bool _hasSelected;
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region properties
|
|
||||||
public DataGrid DataGrid
|
|
||||||
{
|
|
||||||
get { return (DataGrid)GetValue(DataGridProperty); }
|
|
||||||
set { SetValue(DataGridProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public int Index
|
|
||||||
{
|
|
||||||
get { return (int)GetValue(IndexProperty); }
|
|
||||||
set { SetValue(IndexProperty, value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public object RowContext
|
|
||||||
{
|
|
||||||
get { return GetValue(RowContextProperty); }
|
|
||||||
set { SetValue(RowContextProperty, value); }
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Bindable Properties
|
|
||||||
public static readonly BindableProperty DataGridProperty =
|
|
||||||
BindableProperty.Create(
|
|
||||||
nameof(DataGrid),
|
|
||||||
typeof(DataGrid),
|
|
||||||
typeof(DataGridViewCell),
|
|
||||||
null,
|
|
||||||
propertyChanged: (b, o, n) => (b as DataGridViewCell).CreateView());
|
|
||||||
|
|
||||||
public static readonly BindableProperty IndexProperty =
|
|
||||||
BindableProperty.Create(
|
|
||||||
nameof(Index),
|
|
||||||
typeof(int),
|
|
||||||
typeof(DataGridViewCell),
|
|
||||||
0,
|
|
||||||
propertyChanged: (b, o, n) => (b as DataGridViewCell).UpdateBackgroundColor());
|
|
||||||
|
|
||||||
public static readonly BindableProperty RowContextProperty =
|
|
||||||
BindableProperty.Create(
|
|
||||||
nameof(RowContext),
|
|
||||||
typeof(object),
|
|
||||||
typeof(DataGridViewCell),
|
|
||||||
propertyChanged: (b, o, n) => (b as DataGridViewCell).UpdateBackgroundColor());
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Methods
|
|
||||||
private void CreateView()
|
|
||||||
{
|
|
||||||
UpdateBackgroundColor();
|
|
||||||
|
|
||||||
_mainLayout = new Grid()
|
|
||||||
{
|
|
||||||
BackgroundColor = DataGrid.BorderColor,
|
|
||||||
RowSpacing = 0,
|
|
||||||
ColumnSpacing = DataGrid.BorderThickness.HorizontalThickness / 2,
|
|
||||||
Padding = new Thickness(DataGrid.BorderThickness.HorizontalThickness / 2,
|
|
||||||
DataGrid.BorderThickness.VerticalThickness / 2),
|
|
||||||
};
|
|
||||||
|
|
||||||
foreach (var col in DataGrid.Columns)
|
|
||||||
{
|
|
||||||
_mainLayout.ColumnDefinitions.Add(new ColumnDefinition() { Width = col.Width });
|
|
||||||
View cell;
|
|
||||||
|
|
||||||
if (col.CellTemplate != null)
|
|
||||||
{
|
|
||||||
cell = new ContentView() { Content = col.CellTemplate.CreateContent() as View };
|
|
||||||
if (col.PropertyName != null)
|
|
||||||
{
|
|
||||||
cell.SetBinding(BindingContextProperty,
|
|
||||||
new Binding(col.PropertyName, source: RowContext));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var text = new Label
|
|
||||||
{
|
|
||||||
TextColor = _textColor,
|
|
||||||
HorizontalOptions = col.HorizontalContentAlignment,
|
|
||||||
VerticalOptions = col.VerticalContentAlignment,
|
|
||||||
LineBreakMode = LineBreakMode.WordWrap,
|
|
||||||
};
|
|
||||||
text.SetBinding(Label.TextProperty, new Binding(col.PropertyName, BindingMode.Default, stringFormat: col.StringFormat));
|
|
||||||
text.SetBinding(Label.FontSizeProperty, new Binding(DataGrid.FontSizeProperty.PropertyName, BindingMode.Default, source: DataGrid));
|
|
||||||
text.SetBinding(Label.FontFamilyProperty, new Binding(DataGrid.FontFamilyProperty.PropertyName, BindingMode.Default, source: DataGrid));
|
|
||||||
|
|
||||||
cell = new ContentView
|
|
||||||
{
|
|
||||||
Padding = 0,
|
|
||||||
BackgroundColor = _bgColor,
|
|
||||||
Content = text,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
_mainLayout.Children.Add(cell);
|
|
||||||
Grid.SetColumn(cell, DataGrid.Columns.IndexOf(col));
|
|
||||||
}
|
|
||||||
|
|
||||||
View = _mainLayout;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void UpdateBackgroundColor()
|
|
||||||
{
|
|
||||||
_hasSelected = DataGrid.SelectedItem == RowContext;
|
|
||||||
int actualIndex = DataGrid?.InternalItems?.IndexOf(BindingContext) ?? -1;
|
|
||||||
if (actualIndex > -1)
|
|
||||||
{
|
|
||||||
_bgColor = (DataGrid.SelectionEnabled && DataGrid.SelectedItem != null && DataGrid.SelectedItem == RowContext) ?
|
|
||||||
DataGrid.ActiveRowColor : DataGrid.RowsBackgroundColorPalette.GetColor(Index, BindingContext);
|
|
||||||
_textColor = DataGrid.RowsTextColorPalette.GetColor(actualIndex, BindingContext);
|
|
||||||
|
|
||||||
ChangeColor(_bgColor);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ChangeColor(Color color)
|
|
||||||
{
|
|
||||||
foreach (var v in _mainLayout.Children)
|
|
||||||
{
|
|
||||||
v.BackgroundColor = color;
|
|
||||||
var contentView = v as ContentView;
|
|
||||||
if (contentView?.Content is Label)
|
|
||||||
((Label)contentView.Content).TextColor = _textColor;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnBindingContextChanged()
|
|
||||||
{
|
|
||||||
base.OnBindingContextChanged();
|
|
||||||
UpdateBackgroundColor();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnParentSet()
|
|
||||||
{
|
|
||||||
base.OnParentSet();
|
|
||||||
if (Parent != null)
|
|
||||||
DataGrid.ItemSelected += DataGrid_ItemSelected;
|
|
||||||
else
|
|
||||||
DataGrid.ItemSelected -= DataGrid_ItemSelected;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void DataGrid_ItemSelected(object sender, SelectedItemChangedEventArgs e)
|
|
||||||
{
|
|
||||||
if (DataGrid.SelectionEnabled && (e.SelectedItem == RowContext || _hasSelected))
|
|
||||||
{
|
|
||||||
UpdateBackgroundColor();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
using Xamarin.Forms;
|
|
||||||
namespace Aurora.Design.Components.DataGrid
|
|
||||||
{
|
|
||||||
public interface IColorProvider
|
|
||||||
{
|
|
||||||
Color GetColor(int rowIndex, object item);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,17 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using Xamarin.Forms;
|
|
||||||
|
|
||||||
namespace Aurora.Design.Components.DataGrid
|
|
||||||
{
|
|
||||||
public sealed class PaletteCollection : List<Color>, IColorProvider
|
|
||||||
{
|
|
||||||
public Color GetColor(int rowIndex, object item)
|
|
||||||
{
|
|
||||||
if (Count > 0)
|
|
||||||
return this.ElementAt(rowIndex % Count);
|
|
||||||
else
|
|
||||||
return default(Color);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,51 +0,0 @@
|
|||||||
using System;
|
|
||||||
using Xamarin.Forms;
|
|
||||||
|
|
||||||
namespace Aurora.Design.Components.DataGrid
|
|
||||||
{
|
|
||||||
|
|
||||||
[TypeConverter(typeof(SortDataTypeConverter))]
|
|
||||||
public class SortData
|
|
||||||
{
|
|
||||||
|
|
||||||
#region ctor
|
|
||||||
public SortData()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public SortData(int index, SortingOrder order)
|
|
||||||
{
|
|
||||||
Index = index;
|
|
||||||
Order = order;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Properties
|
|
||||||
public SortingOrder Order { get; set; }
|
|
||||||
|
|
||||||
public int Index { get; set; }
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
public static implicit operator SortData(int index)
|
|
||||||
{
|
|
||||||
return new SortData
|
|
||||||
{
|
|
||||||
Index = Math.Abs(index),
|
|
||||||
Order = index < 0 ? SortingOrder.Descendant : SortingOrder.Ascendant
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
|
||||||
{
|
|
||||||
if (obj is SortData)
|
|
||||||
{
|
|
||||||
SortData other = obj as SortData;
|
|
||||||
return other.Index == Index && other.Order == Order;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,24 +0,0 @@
|
|||||||
using System;
|
|
||||||
using Xamarin.Forms;
|
|
||||||
|
|
||||||
namespace Aurora.Design.Components.DataGrid
|
|
||||||
{
|
|
||||||
public class SortDataTypeConverter : TypeConverter
|
|
||||||
{
|
|
||||||
|
|
||||||
public override bool CanConvertFrom(Type sourceType)
|
|
||||||
{
|
|
||||||
return base.CanConvertFrom(sourceType);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override object ConvertFromInvariantString(string value)
|
|
||||||
{
|
|
||||||
int index = 0;
|
|
||||||
|
|
||||||
if (int.TryParse(value, out index))
|
|
||||||
return (SortData)index;
|
|
||||||
else
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,9 +0,0 @@
|
|||||||
namespace Aurora.Design.Components.DataGrid
|
|
||||||
{
|
|
||||||
public enum SortingOrder
|
|
||||||
{
|
|
||||||
None = 0,
|
|
||||||
Ascendant = 1,
|
|
||||||
Descendant = 2,
|
|
||||||
}
|
|
||||||
}
|
|
Binary file not shown.
Before Width: | Height: | Size: 6.9 KiB |
Binary file not shown.
Before Width: | Height: | Size: 6.9 KiB |
@ -2,7 +2,7 @@
|
|||||||
<ContentView
|
<ContentView
|
||||||
xmlns="http://xamarin.com/schemas/2014/forms"
|
xmlns="http://xamarin.com/schemas/2014/forms"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||||
xmlns:dg="clr-namespace:Aurora.Design.Components.DataGrid"
|
xmlns:dg="clr-namespace:Xamarin.Forms.DataGrid;assembly=Xamarin.Forms.DataGrid"
|
||||||
x:Class="Aurora.Design.Components.Library.Library">
|
x:Class="Aurora.Design.Components.Library.Library">
|
||||||
<ContentView.Resources>
|
<ContentView.Resources>
|
||||||
<StyleSheet
|
<StyleSheet
|
||||||
|
Loading…
Reference in New Issue
Block a user