Added support for RecyclerView with ObservableRecyclerAdapter, CachingViewHolder

and supporting extension methods. Note that this is a separate assembly
because of the required Support.V7 reference. It will also be a separate
Nuget package.
This commit is contained in:
Laurent Bugnion 2016-04-23 23:36:32 +02:00
Родитель 97993a304d
Коммит 52e973214c
18 изменённых файлов: 882 добавлений и 296 удалений

Просмотреть файл

@ -1,26 +1,18 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.24720.0
VisualStudioVersion = 14.0.25123.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GalaSoft.MvvmLight (PCL)", "GalaSoft.MvvmLight (PCL)\GalaSoft.MvvmLight (PCL).csproj", "{6A912701-3BA1-4975-ADBF-160CAF66B640}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GalaSoft.MvvmLight.Test (PNET45)", "Tests\PCL\GalaSoft.MvvmLight.Test (PNET45)\GalaSoft.MvvmLight.Test (PNET45).csproj", "{59378F82-F92D-457E-8FB1-B7799A7A919B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestViews", "TestViews", "{B25F0638-578E-4E2A-9783-23EB99B525BE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GalaSoft.MvvmLight.TestView (PNET45)", "TestViews\PCL\GalaSoft.MvvmLight.TestView (PNET45)\GalaSoft.MvvmLight.TestView (PNET45).csproj", "{AAE11955-7DF4-4758-9024-C5247BDE0368}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{99D5856E-95ED-49B6-9F0C-0A5878A87009}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GalaSoft.MvvmLight.Platform (NET45)", "GalaSoft.MvvmLight.Platform (NET45)\GalaSoft.MvvmLight.Platform (NET45).csproj", "{0722B3DB-76CD-4562-BEA9-5C5C416B6A39}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GalaSoft.MvvmLight.Platform (WIN81)", "GalaSoft.MvvmLight.Platform (WIN81)\GalaSoft.MvvmLight.Platform (WIN81).csproj", "{8E1FCE57-FD06-44ED-B2BC-6D935329630E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GalaSoft.MvvmLight.TestView (PWIN81)", "TestViews\PCL\GalaSoft.MvvmLight.TestView (PWIN81)\GalaSoft.MvvmLight.TestView (PWIN81).csproj", "{2CFF4493-5482-465C-A02C-784435861343}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GalaSoft.MvvmLight.TestView (PWPSL81)", "TestViews\PCL\GalaSoft.MvvmLight.TestView (PWPSL81)\GalaSoft.MvvmLight.TestView (PWPSL81).csproj", "{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GalaSoft.MvvmLight.Platform (WPSL81)", "GalaSoft.MvvmLight.Platform (WPSL81)\GalaSoft.MvvmLight.Platform (WPSL81).csproj", "{588595A3-48D5-4A2C-930A-59C5123A07CD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GalaSoft.MvvmLight.Test (PWPSL81)", "Tests\PCL\GalaSoft.MvvmLight.Test (PWPSL81)\GalaSoft.MvvmLight.Test (PWPSL81).csproj", "{29B2A5BA-2E0A-484A-866D-41CCE7144521}"
@ -41,8 +33,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GalaSoft.MvvmLight.Extras (
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GalaSoft.MvvmLight.Test (NET35)", "Tests\GalaSoft.MvvmLight.Test (NET35)\GalaSoft.MvvmLight.Test (NET35).csproj", "{0F66F445-5DF0-4064-8214-3D16FF924E88}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GalaSoft.MvvmLight.TestView (PWP81)", "TestViews\PCL\GalaSoft.MvvmLight.TestView (PWP81)\GalaSoft.MvvmLight.TestView (PWP81).csproj", "{E924C358-8AFD-4B47-903D-5760221AA05C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GalaSoft.MvvmLight.Extras (PCL)", "GalaSoft.MvvmLight.Extras (PCL)\GalaSoft.MvvmLight.Extras (PCL).csproj", "{39C71A69-4ACE-4B45-9A2C-C274FADA78EF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GalaSoft.MvvmLight.Test (PWIN81)", "Tests\PCL\GalaSoft.MvvmLight.Test (PWIN81)\GalaSoft.MvvmLight.Test (PWIN81).csproj", "{DB6CF16F-315E-4BBD-8348-369905645838}"
@ -65,6 +55,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GalaSoft.MvvmLight.Test (An
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GalaSoft.MvvmLight.Test (iOS)", "Tests\AppleTestApp\GalaSoft.MvvmLight.Test (iOS).csproj", "{D688119A-4FA8-4764-BE47-90724571B80C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GalaSoft.MvvmLight.Platform.AndroidSupport", "GalaSoft.MvvmLight.AndroidSupport\GalaSoft.MvvmLight.Platform.AndroidSupport.csproj", "{04369985-476F-47EE-8B20-E89104FDE03F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Ad-Hoc|Any CPU = Ad-Hoc|Any CPU
@ -197,38 +189,6 @@ Global
{59378F82-F92D-457E-8FB1-B7799A7A919B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{59378F82-F92D-457E-8FB1-B7799A7A919B}.Release|x64.ActiveCfg = Release|Any CPU
{59378F82-F92D-457E-8FB1-B7799A7A919B}.Release|x86.ActiveCfg = Release|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.AppStore|ARM.ActiveCfg = Release|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.AppStore|iPhone.ActiveCfg = Release|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.AppStore|x64.ActiveCfg = Release|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.AppStore|x86.ActiveCfg = Release|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Debug|ARM.ActiveCfg = Debug|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Debug|x64.ActiveCfg = Debug|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Debug|x86.ActiveCfg = Debug|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Release|Any CPU.Build.0 = Release|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Release|ARM.ActiveCfg = Release|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Release|iPhone.ActiveCfg = Release|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Release|x64.ActiveCfg = Release|Any CPU
{AAE11955-7DF4-4758-9024-C5247BDE0368}.Release|x86.ActiveCfg = Release|Any CPU
{0722B3DB-76CD-4562-BEA9-5C5C416B6A39}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
{0722B3DB-76CD-4562-BEA9-5C5C416B6A39}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
{0722B3DB-76CD-4562-BEA9-5C5C416B6A39}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
@ -335,98 +295,6 @@ Global
{8E1FCE57-FD06-44ED-B2BC-6D935329630E}.Release|x64.Build.0 = Release|x64
{8E1FCE57-FD06-44ED-B2BC-6D935329630E}.Release|x86.ActiveCfg = Release|x86
{8E1FCE57-FD06-44ED-B2BC-6D935329630E}.Release|x86.Build.0 = Release|x86
{2CFF4493-5482-465C-A02C-784435861343}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
{2CFF4493-5482-465C-A02C-784435861343}.Ad-Hoc|ARM.ActiveCfg = Release|ARM
{2CFF4493-5482-465C-A02C-784435861343}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
{2CFF4493-5482-465C-A02C-784435861343}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
{2CFF4493-5482-465C-A02C-784435861343}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|x86
{2CFF4493-5482-465C-A02C-784435861343}.Ad-Hoc|x64.ActiveCfg = Release|x64
{2CFF4493-5482-465C-A02C-784435861343}.Ad-Hoc|x86.ActiveCfg = Release|x86
{2CFF4493-5482-465C-A02C-784435861343}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
{2CFF4493-5482-465C-A02C-784435861343}.AppStore|ARM.ActiveCfg = Release|ARM
{2CFF4493-5482-465C-A02C-784435861343}.AppStore|iPhone.ActiveCfg = Release|Any CPU
{2CFF4493-5482-465C-A02C-784435861343}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
{2CFF4493-5482-465C-A02C-784435861343}.AppStore|Mixed Platforms.ActiveCfg = Release|x86
{2CFF4493-5482-465C-A02C-784435861343}.AppStore|x64.ActiveCfg = Release|x64
{2CFF4493-5482-465C-A02C-784435861343}.AppStore|x86.ActiveCfg = Release|x86
{2CFF4493-5482-465C-A02C-784435861343}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2CFF4493-5482-465C-A02C-784435861343}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2CFF4493-5482-465C-A02C-784435861343}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{2CFF4493-5482-465C-A02C-784435861343}.Debug|ARM.ActiveCfg = Debug|ARM
{2CFF4493-5482-465C-A02C-784435861343}.Debug|ARM.Build.0 = Debug|ARM
{2CFF4493-5482-465C-A02C-784435861343}.Debug|ARM.Deploy.0 = Debug|ARM
{2CFF4493-5482-465C-A02C-784435861343}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{2CFF4493-5482-465C-A02C-784435861343}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{2CFF4493-5482-465C-A02C-784435861343}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{2CFF4493-5482-465C-A02C-784435861343}.Debug|Mixed Platforms.Build.0 = Debug|x86
{2CFF4493-5482-465C-A02C-784435861343}.Debug|Mixed Platforms.Deploy.0 = Debug|x86
{2CFF4493-5482-465C-A02C-784435861343}.Debug|x64.ActiveCfg = Debug|x64
{2CFF4493-5482-465C-A02C-784435861343}.Debug|x64.Build.0 = Debug|x64
{2CFF4493-5482-465C-A02C-784435861343}.Debug|x64.Deploy.0 = Debug|x64
{2CFF4493-5482-465C-A02C-784435861343}.Debug|x86.ActiveCfg = Debug|x86
{2CFF4493-5482-465C-A02C-784435861343}.Debug|x86.Build.0 = Debug|x86
{2CFF4493-5482-465C-A02C-784435861343}.Debug|x86.Deploy.0 = Debug|x86
{2CFF4493-5482-465C-A02C-784435861343}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2CFF4493-5482-465C-A02C-784435861343}.Release|Any CPU.Build.0 = Release|Any CPU
{2CFF4493-5482-465C-A02C-784435861343}.Release|Any CPU.Deploy.0 = Release|Any CPU
{2CFF4493-5482-465C-A02C-784435861343}.Release|ARM.ActiveCfg = Release|ARM
{2CFF4493-5482-465C-A02C-784435861343}.Release|ARM.Build.0 = Release|ARM
{2CFF4493-5482-465C-A02C-784435861343}.Release|ARM.Deploy.0 = Release|ARM
{2CFF4493-5482-465C-A02C-784435861343}.Release|iPhone.ActiveCfg = Release|Any CPU
{2CFF4493-5482-465C-A02C-784435861343}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{2CFF4493-5482-465C-A02C-784435861343}.Release|Mixed Platforms.ActiveCfg = Release|x86
{2CFF4493-5482-465C-A02C-784435861343}.Release|Mixed Platforms.Build.0 = Release|x86
{2CFF4493-5482-465C-A02C-784435861343}.Release|Mixed Platforms.Deploy.0 = Release|x86
{2CFF4493-5482-465C-A02C-784435861343}.Release|x64.ActiveCfg = Release|x64
{2CFF4493-5482-465C-A02C-784435861343}.Release|x64.Build.0 = Release|x64
{2CFF4493-5482-465C-A02C-784435861343}.Release|x64.Deploy.0 = Release|x64
{2CFF4493-5482-465C-A02C-784435861343}.Release|x86.ActiveCfg = Release|x86
{2CFF4493-5482-465C-A02C-784435861343}.Release|x86.Build.0 = Release|x86
{2CFF4493-5482-465C-A02C-784435861343}.Release|x86.Deploy.0 = Release|x86
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Ad-Hoc|ARM.ActiveCfg = Release|ARM
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|x86
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Ad-Hoc|x86.ActiveCfg = Release|x86
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.AppStore|ARM.ActiveCfg = Release|ARM
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.AppStore|iPhone.ActiveCfg = Release|Any CPU
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.AppStore|Mixed Platforms.ActiveCfg = Release|x86
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.AppStore|x64.ActiveCfg = Release|Any CPU
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.AppStore|x86.ActiveCfg = Release|x86
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Debug|ARM.ActiveCfg = Debug|ARM
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Debug|ARM.Build.0 = Debug|ARM
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Debug|ARM.Deploy.0 = Debug|ARM
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Debug|Mixed Platforms.Build.0 = Debug|x86
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Debug|Mixed Platforms.Deploy.0 = Debug|x86
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Debug|x64.ActiveCfg = Debug|Any CPU
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Debug|x86.ActiveCfg = Debug|x86
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Debug|x86.Build.0 = Debug|x86
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Debug|x86.Deploy.0 = Debug|x86
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Release|Any CPU.Build.0 = Release|Any CPU
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Release|Any CPU.Deploy.0 = Release|Any CPU
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Release|ARM.ActiveCfg = Release|ARM
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Release|ARM.Build.0 = Release|ARM
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Release|ARM.Deploy.0 = Release|ARM
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Release|iPhone.ActiveCfg = Release|Any CPU
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Release|Mixed Platforms.ActiveCfg = Release|x86
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Release|Mixed Platforms.Build.0 = Release|x86
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Release|Mixed Platforms.Deploy.0 = Release|x86
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Release|x64.ActiveCfg = Release|Any CPU
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Release|x86.ActiveCfg = Release|x86
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Release|x86.Build.0 = Release|x86
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6}.Release|x86.Deploy.0 = Release|x86
{588595A3-48D5-4A2C-930A-59C5123A07CD}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
{588595A3-48D5-4A2C-930A-59C5123A07CD}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
{588595A3-48D5-4A2C-930A-59C5123A07CD}.Ad-Hoc|ARM.ActiveCfg = Release|ARM
@ -971,50 +839,6 @@ Global
{0F66F445-5DF0-4064-8214-3D16FF924E88}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{0F66F445-5DF0-4064-8214-3D16FF924E88}.Release|x64.ActiveCfg = Release|Any CPU
{0F66F445-5DF0-4064-8214-3D16FF924E88}.Release|x86.ActiveCfg = Release|Any CPU
{E924C358-8AFD-4B47-903D-5760221AA05C}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
{E924C358-8AFD-4B47-903D-5760221AA05C}.Ad-Hoc|ARM.ActiveCfg = Release|ARM
{E924C358-8AFD-4B47-903D-5760221AA05C}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
{E924C358-8AFD-4B47-903D-5760221AA05C}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
{E924C358-8AFD-4B47-903D-5760221AA05C}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|x86
{E924C358-8AFD-4B47-903D-5760221AA05C}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
{E924C358-8AFD-4B47-903D-5760221AA05C}.Ad-Hoc|x86.ActiveCfg = Release|x86
{E924C358-8AFD-4B47-903D-5760221AA05C}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
{E924C358-8AFD-4B47-903D-5760221AA05C}.AppStore|ARM.ActiveCfg = Release|ARM
{E924C358-8AFD-4B47-903D-5760221AA05C}.AppStore|iPhone.ActiveCfg = Release|Any CPU
{E924C358-8AFD-4B47-903D-5760221AA05C}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
{E924C358-8AFD-4B47-903D-5760221AA05C}.AppStore|Mixed Platforms.ActiveCfg = Release|x86
{E924C358-8AFD-4B47-903D-5760221AA05C}.AppStore|x64.ActiveCfg = Release|Any CPU
{E924C358-8AFD-4B47-903D-5760221AA05C}.AppStore|x86.ActiveCfg = Release|x86
{E924C358-8AFD-4B47-903D-5760221AA05C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E924C358-8AFD-4B47-903D-5760221AA05C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E924C358-8AFD-4B47-903D-5760221AA05C}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{E924C358-8AFD-4B47-903D-5760221AA05C}.Debug|ARM.ActiveCfg = Debug|ARM
{E924C358-8AFD-4B47-903D-5760221AA05C}.Debug|ARM.Build.0 = Debug|ARM
{E924C358-8AFD-4B47-903D-5760221AA05C}.Debug|ARM.Deploy.0 = Debug|ARM
{E924C358-8AFD-4B47-903D-5760221AA05C}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{E924C358-8AFD-4B47-903D-5760221AA05C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{E924C358-8AFD-4B47-903D-5760221AA05C}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{E924C358-8AFD-4B47-903D-5760221AA05C}.Debug|Mixed Platforms.Build.0 = Debug|x86
{E924C358-8AFD-4B47-903D-5760221AA05C}.Debug|Mixed Platforms.Deploy.0 = Debug|x86
{E924C358-8AFD-4B47-903D-5760221AA05C}.Debug|x64.ActiveCfg = Debug|Any CPU
{E924C358-8AFD-4B47-903D-5760221AA05C}.Debug|x86.ActiveCfg = Debug|x86
{E924C358-8AFD-4B47-903D-5760221AA05C}.Debug|x86.Build.0 = Debug|x86
{E924C358-8AFD-4B47-903D-5760221AA05C}.Debug|x86.Deploy.0 = Debug|x86
{E924C358-8AFD-4B47-903D-5760221AA05C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E924C358-8AFD-4B47-903D-5760221AA05C}.Release|Any CPU.Build.0 = Release|Any CPU
{E924C358-8AFD-4B47-903D-5760221AA05C}.Release|Any CPU.Deploy.0 = Release|Any CPU
{E924C358-8AFD-4B47-903D-5760221AA05C}.Release|ARM.ActiveCfg = Release|ARM
{E924C358-8AFD-4B47-903D-5760221AA05C}.Release|ARM.Build.0 = Release|ARM
{E924C358-8AFD-4B47-903D-5760221AA05C}.Release|ARM.Deploy.0 = Release|ARM
{E924C358-8AFD-4B47-903D-5760221AA05C}.Release|iPhone.ActiveCfg = Release|Any CPU
{E924C358-8AFD-4B47-903D-5760221AA05C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{E924C358-8AFD-4B47-903D-5760221AA05C}.Release|Mixed Platforms.ActiveCfg = Release|x86
{E924C358-8AFD-4B47-903D-5760221AA05C}.Release|Mixed Platforms.Build.0 = Release|x86
{E924C358-8AFD-4B47-903D-5760221AA05C}.Release|Mixed Platforms.Deploy.0 = Release|x86
{E924C358-8AFD-4B47-903D-5760221AA05C}.Release|x64.ActiveCfg = Release|Any CPU
{E924C358-8AFD-4B47-903D-5760221AA05C}.Release|x86.ActiveCfg = Release|x86
{E924C358-8AFD-4B47-903D-5760221AA05C}.Release|x86.Build.0 = Release|x86
{E924C358-8AFD-4B47-903D-5760221AA05C}.Release|x86.Deploy.0 = Release|x86
{39C71A69-4ACE-4B45-9A2C-C274FADA78EF}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
{39C71A69-4ACE-4B45-9A2C-C274FADA78EF}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
{39C71A69-4ACE-4B45-9A2C-C274FADA78EF}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
@ -1645,20 +1469,72 @@ Global
{D688119A-4FA8-4764-BE47-90724571B80C}.Release|Mixed Platforms.Build.0 = Release|iPhone
{D688119A-4FA8-4764-BE47-90724571B80C}.Release|x64.ActiveCfg = Release|iPhone
{D688119A-4FA8-4764-BE47-90724571B80C}.Release|x86.ActiveCfg = Release|iPhone
{04369985-476F-47EE-8B20-E89104FDE03F}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Ad-Hoc|ARM.Build.0 = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Ad-Hoc|x64.Build.0 = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Ad-Hoc|x86.Build.0 = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.AppStore|Any CPU.Build.0 = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.AppStore|ARM.ActiveCfg = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.AppStore|ARM.Build.0 = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.AppStore|iPhone.ActiveCfg = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.AppStore|iPhone.Build.0 = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.AppStore|x64.ActiveCfg = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.AppStore|x64.Build.0 = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.AppStore|x86.ActiveCfg = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.AppStore|x86.Build.0 = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Debug|ARM.ActiveCfg = Debug|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Debug|ARM.Build.0 = Debug|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Debug|iPhone.Build.0 = Debug|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Debug|x64.ActiveCfg = Debug|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Debug|x64.Build.0 = Debug|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Debug|x86.ActiveCfg = Debug|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Debug|x86.Build.0 = Debug|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Release|Any CPU.Build.0 = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Release|ARM.ActiveCfg = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Release|ARM.Build.0 = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Release|iPhone.ActiveCfg = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Release|iPhone.Build.0 = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Release|x64.ActiveCfg = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Release|x64.Build.0 = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Release|x86.ActiveCfg = Release|Any CPU
{04369985-476F-47EE-8B20-E89104FDE03F}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{59378F82-F92D-457E-8FB1-B7799A7A919B} = {99D5856E-95ED-49B6-9F0C-0A5878A87009}
{AAE11955-7DF4-4758-9024-C5247BDE0368} = {B25F0638-578E-4E2A-9783-23EB99B525BE}
{2CFF4493-5482-465C-A02C-784435861343} = {B25F0638-578E-4E2A-9783-23EB99B525BE}
{BEC455D1-BA26-43FB-AC1A-C61FCB55DCC6} = {B25F0638-578E-4E2A-9783-23EB99B525BE}
{29B2A5BA-2E0A-484A-866D-41CCE7144521} = {99D5856E-95ED-49B6-9F0C-0A5878A87009}
{B59BBF25-4D29-4B1F-AB02-588AC4032E9E} = {99D5856E-95ED-49B6-9F0C-0A5878A87009}
{30EFC165-77CE-4AC3-B99B-7998D5E39749} = {99D5856E-95ED-49B6-9F0C-0A5878A87009}
{0F66F445-5DF0-4064-8214-3D16FF924E88} = {99D5856E-95ED-49B6-9F0C-0A5878A87009}
{E924C358-8AFD-4B47-903D-5760221AA05C} = {B25F0638-578E-4E2A-9783-23EB99B525BE}
{DB6CF16F-315E-4BBD-8348-369905645838} = {99D5856E-95ED-49B6-9F0C-0A5878A87009}
{3620804D-B56B-4C22-B987-AAD7B7F40FC8} = {99D5856E-95ED-49B6-9F0C-0A5878A87009}
{0E24C663-BDCB-4702-864B-A850A9C68F03} = {99D5856E-95ED-49B6-9F0C-0A5878A87009}

Просмотреть файл

@ -0,0 +1,81 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{04369985-476F-47EE-8B20-E89104FDE03F}</ProjectGuid>
<ProjectTypeGuids>{EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>GalaSoft.MvvmLight</RootNamespace>
<AssemblyName>GalaSoft.MvvmLight.Platform.AndroidSupport</AssemblyName>
<FileAlignment>512</FileAlignment>
<AndroidResgenFile>Resources\Resource.Designer.cs</AndroidResgenFile>
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
<AndroidUseLatestPlatformSdk>True</AndroidUseLatestPlatformSdk>
<TargetFrameworkVersion>v6.0</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;XAMARIN;ANDROID;DEBUG</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\Debug\GalaSoft.MvvmLight.Platform.AndroidSupport.XML</DocumentationFile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE;XAMARIN;ANDROID</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\Release\GalaSoft.MvvmLight.Platform.AndroidSupport.XML</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<Reference Include="Mono.Android" />
<Reference Include="mscorlib" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Xml" />
<Reference Include="Xamarin.Android.Support.v4, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.v4.23.3.0\lib\MonoAndroid403\Xamarin.Android.Support.v4.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Xamarin.Android.Support.v7.RecyclerView, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.v7.RecyclerView.23.3.0\lib\MonoAndroid403\Xamarin.Android.Support.v7.RecyclerView.dll</HintPath>
<Private>True</Private>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="..\GalaSoft.MvvmLight.Platform %28NET45%29\Properties\AssemblyInfo.cs">
<Link>Properties\AssemblyInfo.cs</Link>
</Compile>
<Compile Include="Helpers\CachingViewHolder.cs" />
<Compile Include="Helpers\ExtensionsAndroid2.cs" />
<Compile Include="Helpers\ObservableRecyclerAdapter.cs" />
<Compile Include="Resources\Resource.Designer.cs" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\GalaSoft.MvvmLight.Platform %28Android%29\GalaSoft.MvvmLight.Platform %28Android%29.csproj">
<Project>{a5b7741d-e331-438c-b3bf-596b048db622}</Project>
<Name>GalaSoft.MvvmLight.Platform %28Android%29</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

Просмотреть файл

@ -0,0 +1,163 @@
// ****************************************************************************
// <copyright file="CachingViewHolder.cs" company="GalaSoft Laurent Bugnion">
// Copyright © GalaSoft Laurent Bugnion 2009-2016
// </copyright>
// ****************************************************************************
// <author>Laurent Bugnion</author>
// <email>laurent@galasoft.ch</email>
// <date>17.04.2016</date>
// <project>GalaSoft.MvvmLight</project>
// <web>http://www.mvvmlight.net</web>
// <license>
// See license.txt in this solution or http://www.galasoft.ch/license_MIT.txt
// </license>
// ****************************************************************************
using System;
using System.Collections.Generic;
using Android.Runtime;
using Android.Support.V7.Widget;
using Android.Views;
namespace GalaSoft.MvvmLight.Helpers
{
/// <summary>
/// An extension of <see cref="RecyclerView.ViewHolder"/> optimized for usage with the
/// <see cref="ObservableRecyclerAdapter{TItem, THolder}"/>. Provides additional features
/// that can be used with the MVVM Light data binding system.
/// </summary>
////[ClassInfo(typeof(ObservableAdapter<T>))]
public class CachingViewHolder : RecyclerView.ViewHolder
{
private readonly Dictionary<object, Binding> _bindings = new Dictionary<object, Binding>();
private readonly Dictionary<int, View> _cachedViews = new Dictionary<int, View>();
private Action<int, View> _clickCallback;
/// <summary>
/// A callback that will be executed when the corresponding item is clicked or tapped
/// by the user.
/// </summary>
public Action<int, View> ClickCallback
{
get
{
return _clickCallback;
}
set
{
if (value == null)
{
ItemView.Click -= OnViewClick;
}
else
{
ItemView.Click += OnViewClick;
}
_clickCallback = value;
}
}
/// <summary>
/// Initializes an instance of this class. In most cases this method
/// is not used by the developer.
/// </summary>
/// <param name="javaReference"></param>
/// <param name="transfer"></param>
public CachingViewHolder(IntPtr javaReference, JniHandleOwnership transfer)
: base(javaReference, transfer)
{
}
/// <summary>
/// Initializes an instance of this class.
/// </summary>
/// <param name="itemView">The view that this holder is attached to.</param>
public CachingViewHolder(View itemView)
: base(itemView)
{
}
/// <summary>
/// Detaches and removes a binding from this holder.
/// Use this method (in case a view is getting recycled) to clean up
/// existing bindings before attaching new ones. The binding that needs
/// to be detached must have been added to the holder using the <see cref="SaveBinding"/> method.
/// </summary>
/// <param name="key">The key corresponding to the binding to detach and delete. This is the
/// same key that was used in the <see cref="SaveBinding"/> method.</param>
/// <returns>The binding that has been detached and deleted, in case further processing
/// is necessary/</returns>
public Binding DeleteBinding(object key)
{
lock (_bindings)
{
if (_bindings.ContainsKey(key))
{
var binding = _bindings[key];
binding.Detach();
_bindings.Remove(key);
return binding;
}
return null;
}
}
/// <summary>
/// Explores the attached view and returns the UI element corresponding
/// to the viewId. If no element is found with this ID, the method returns null.
/// </summary>
/// <typeparam name="TView">The type of the view to be returned.</typeparam>
/// <param name="viewId">The ID of the subview that needs to be retrieved.</param>
/// <returns>The sub view corresponding to the viewId, or null if no corresponding sub view is found.</returns>
public TView FindCachedViewById<TView>(int viewId)
where TView : View
{
if (_cachedViews.ContainsKey(viewId))
{
return (TView)_cachedViews[viewId];
}
var view = ItemView.FindViewById<TView>(viewId);
_cachedViews.Add(viewId, view);
return view;
}
/// <summary>
/// Saves a binding between a element of the view and an element of the data item
/// represented by the view.
/// If the view is getting recycled, the binding should be deleted using the
/// <see cref="DeleteBinding"/> method.
/// </summary>
/// <param name="key">The key used to retriev the binding later. Typically
/// the key is the view to which the binding is attached (if there is only
/// one binding for this view).</param>
/// <param name="binding">The binding to be saved.</param>
public void SaveBinding(object key, Binding binding)
{
lock (_bindings)
{
if (_bindings.ContainsKey(key))
{
_bindings[key].Detach();
_bindings[key] = binding;
}
else
{
_bindings.Add(key, binding);
}
}
}
private void OnViewClick(object sender, EventArgs e)
{
var position = AdapterPosition;
if (position != RecyclerView.NoPosition)
{
_clickCallback?.Invoke(position, ItemView);
}
}
}
}

Просмотреть файл

@ -0,0 +1,85 @@
// ****************************************************************************
// <copyright file="ExtensionsAndroid.cs" company="GalaSoft Laurent Bugnion">
// Copyright © GalaSoft Laurent Bugnion 2009-2016
// </copyright>
// ****************************************************************************
// <author>Laurent Bugnion</author>
// <email>laurent@galasoft.ch</email>
// <date>19.01.2016</date>
// <project>GalaSoft.MvvmLight</project>
// <web>http://www.mvvmlight.net</web>
// <license>
// See license.txt in this solution or http://www.galasoft.ch/license_MIT.txt
// </license>
// ****************************************************************************
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Reflection;
using System.Windows.Input;
using Android.Support.V7.Widget;
using Android.Views;
using Android.Widget;
namespace GalaSoft.MvvmLight.Helpers
{
/// <summary>
/// Defines extension methods for Android only.
/// </summary>
////[ClassInfo(typeof(ObservableAdapter<T>))]
public static class ExtensionsAndroid2
{
/// <summary>
/// Creates a new <see cref="ObservableRecyclerAdapter{TItem, THolder}"/> for a given <see cref="IList{TItem}"/>.
/// </summary>
/// <typeparam name="TItem">The type of the items contained in the <see cref="IList{TItem}"/>.</typeparam>
/// <typeparam name="THolder">The type of the <see cref="RecyclerView.ViewHolder"/> used in the RecyclerView.
/// For better results and simpler implementation, you can use a <see cref="CachingViewHolder"/> or
/// provide your own implementation.</typeparam>
/// <param name="list">The list that the adapter will be created for.</param>
/// <param name="bindViewHolderDelegate">A delegate to the method used to bind the view to the corresponding item.</param>
/// <param name="createViewHolderDelegate">A delegate to the method used to create the view for the corresponding item.</param>
/// <param name="clickCallback">An optional delegate to a method called when an item is clicked or tapped.</param>
/// <returns>The created <see cref="ObservableRecyclerAdapter{TItem, THolder}"/>.</returns>
public static ObservableRecyclerAdapter<TItem, THolder> GetRecyclerAdapter<TItem, THolder>(
this IList<TItem> list,
Action<THolder, TItem, int> bindViewHolderDelegate,
Func<ViewGroup, int, THolder> createViewHolderDelegate,
Action<int, View, int, View> clickCallback = null)
where THolder : RecyclerView.ViewHolder
{
return new ObservableRecyclerAdapter<TItem, THolder>
{
DataSource = list,
BindViewHolderDelegate = bindViewHolderDelegate,
CreateViewHolderDelegate = createViewHolderDelegate,
ClickCallback = clickCallback
};
}
/// <summary>
/// Creates a new <see cref="ObservableRecyclerAdapter{TItem, THolder}"/> for a given <see cref="IList{TItem}"/>.
/// </summary>
/// <typeparam name="TItem">The type of the items contained in the <see cref="IList{T}"/>.</typeparam>
/// <param name="list">The list that the adapter will be created for.</param>
/// <param name="bindViewHolderDelegate">A delegate to the method used to bind the view to the corresponding item.</param>
/// <param name="cellLayoutId">The resource ID of the AXML file used to create the cell.</param>
/// <param name="clickCallback">An optional delegate to a method called when an item is clicked or tapped.</param>
/// <returns>The created <see cref="ObservableRecyclerAdapter{TItem, THolder}"/>.</returns>
public static ObservableRecyclerAdapter<TItem, CachingViewHolder> GetRecyclerAdapter<TItem>(
this IList<TItem> list,
Action<CachingViewHolder, TItem, int> bindViewHolderDelegate,
int cellLayoutId,
Action<int, View, int, View> clickCallback = null)
{
return new ObservableRecyclerAdapter<TItem, CachingViewHolder>
{
DataSource = list,
BindViewHolderDelegate = bindViewHolderDelegate,
CellLayoutId = cellLayoutId,
ClickCallback = clickCallback
};
}
}
}

Просмотреть файл

@ -0,0 +1,338 @@
// ****************************************************************************
// <copyright file="ObservableRecyclerAdapter.cs" company="GalaSoft Laurent Bugnion">
// Copyright © GalaSoft Laurent Bugnion 2009-2016
// </copyright>
// ****************************************************************************
// <author>Laurent Bugnion</author>
// <email>laurent@galasoft.ch</email>
// <date>17.04.2016</date>
// <project>GalaSoft.MvvmLight</project>
// <web>http://www.mvvmlight.net</web>
// <license>
// See license.txt in this solution or http://www.galasoft.ch/license_MIT.txt
// </license>
// ****************************************************************************
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Threading;
using Android.App;
using Android.Support.V7.Widget;
using Android.Views;
namespace GalaSoft.MvvmLight.Helpers
{
/// <summary>
/// A <see cref="RecyclerView.Adapter"/> that automatically updates the associated <see cref="RecyclerView"/> when its
/// data source changes. Note that the changes are only observed if the data source
/// implements <see cref="INotifyCollectionChanged"/>.
/// </summary>
/// <typeparam name="TItem">The type of the items in the data source.</typeparam>
/// <typeparam name="THolder">The type of the <see cref="RecyclerView.ViewHolder"/> used in the RecyclerView.
/// For better results and simpler implementation, you can use a <see cref="CachingViewHolder"/> or
/// provide your own implementation.</typeparam>
////[ClassInfo(typeof(ObservableAdapter<T>)]
public class ObservableRecyclerAdapter<TItem, THolder> : RecyclerView.Adapter, INotifyPropertyChanged
where THolder : RecyclerView.ViewHolder
{
/// <summary>
/// The <see cref="SelectedItem" /> property's name.
/// </summary>
public const string SelectedItemPropertyName = "SelectedItem";
private IList<TItem> _dataSource;
private INotifyCollectionChanged _notifier;
private int _oldPosition = -1;
private View _oldView;
private TItem _selectedItem;
/// <summary>
/// A delegate to a method taking a <see cref="RecyclerView.ViewHolder"/>
/// and setting its View's properties according to the item
/// passed as second parameter.
/// </summary>
public Action<THolder, TItem, int> BindViewHolderDelegate
{
get;
set;
}
/// <summary>
/// The Resource ID of the AXML file we should use to create
/// cells for the RecyclerView. Alternatively you can use the
/// <see cref="CreateViewHolderDelegate"/> property.
/// </summary>
public int CellLayoutId
{
get;
set;
}
/// <summary>
/// A delegate to a callback that will be called when an item
/// in the list is clicked (or tapped) by the user. This can be used
/// to perform UI operations such as changing the background color, etc.
/// </summary>
public Action<int, View, int, View> ClickCallback
{
get;
set;
}
/// <summary>
/// A delegate to a method taking an item's position and
/// a <see cref="RecyclerView.ViewHolder"/> and creating and returning
/// a cell for the RecyclerView. Alternatively you can use the
/// <see cref="CellLayoutId"/> property.
/// </summary>
public Func<ViewGroup, int, THolder> CreateViewHolderDelegate
{
get;
set;
}
/// <summary>
/// The data source of this list adapter.
/// </summary>
public IList<TItem> DataSource
{
get
{
return _dataSource;
}
set
{
if (Equals(_dataSource, value))
{
return;
}
if (_notifier != null)
{
_notifier.CollectionChanged -= HandleCollectionChanged;
}
_dataSource = value;
_notifier = value as INotifyCollectionChanged;
if (_notifier != null)
{
_notifier.CollectionChanged += HandleCollectionChanged;
}
NotifyDataSetChanged(); // Reload everything
}
}
/// <summary>
/// Gets the number of items in the data source.
/// </summary>
public override int ItemCount
{
get
{
return _dataSource == null ? 0 : _dataSource.Count;
}
}
/// <summary>
/// Gets the RecyclerView's selected item. You can use one-way databinding on this property.
/// </summary>
public TItem SelectedItem
{
get
{
return _selectedItem;
}
protected set
{
if (Equals(_selectedItem, value))
{
return;
}
_selectedItem = value;
RaisePropertyChanged(SelectedItemPropertyName);
RaiseSelectionChanged();
}
}
/// <summary>
/// Gets an item corresponding to a given row position.
/// </summary>
/// <param name="row">The row position of the item.</param>
/// <returns>An item corresponding to a given row position.</returns>
public TItem GetItem(int row)
{
return _dataSource[row];
}
/// <summary>
/// Called when the View should be bound to the represented Item.
/// </summary>
/// <param name="holder">The <see cref="RecyclerView.ViewHolder"/> for this item.</param>
/// <param name="position">The position of the item in the data source.</param>
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
if (BindViewHolderDelegate == null)
{
throw new InvalidOperationException(
"OnBindViewHolder was called but no BindViewHolderDelegate was found");
}
BindViewHolderDelegate((THolder)holder, _dataSource[position], position);
}
/// <summary>
/// Called when the View should be created.
/// </summary>
/// <param name="parent">The parent for the view.</param>
/// <param name="viewType">The resource ID (unused).</param>
/// <returns></returns>
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
if (CellLayoutId != 0)
{
var viewHolderType = typeof (THolder);
// The user has specified a ViewHolder type --> auto create the ViewHolder.
var constructor = viewHolderType.GetConstructor(
new[]
{
typeof (View)
});
if (constructor == null)
{
throw new InvalidOperationException(
"No suitable constructor find for " + viewHolderType.FullName);
}
var view = LayoutInflater.From(parent.Context).Inflate(CellLayoutId, parent, false);
var holder = constructor.Invoke(
new object[]
{
view
}) as RecyclerView.ViewHolder;
var castedHolder = holder as CachingViewHolder;
if (castedHolder != null)
{
castedHolder.ClickCallback = OnItemClick;
}
return holder;
}
if (CreateViewHolderDelegate == null)
{
throw new InvalidOperationException(
"OnCreateViewHolder was called but no CreateViewHolderDelegate was found");
}
// No ViewHolderType specified --> Call the delegate
return CreateViewHolderDelegate(parent, viewType);
}
/// <summary>
/// Called when an item is clicked (or tapped) in the list.
/// </summary>
/// <param name="newPosition">The position of the clicked item.</param>
/// <param name="newView">The view representing the clicked item.</param>
public void OnItemClick(int newPosition, View newView)
{
if (ClickCallback != null)
{
ClickCallback(_oldPosition, _oldView, newPosition, newView);
_oldPosition = newPosition;
_oldView = newView;
}
if (_dataSource != null
&& _dataSource.Count >= newPosition)
{
SelectedItem = _dataSource[newPosition];
}
}
/// <summary>
/// Raises the <see cref="PropertyChanged"/> event.
/// </summary>
/// <param name="propertyName">The name of the property that changed.</param>
protected virtual void RaisePropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
{
handler.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
private void HandleCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
Action act = () =>
{
switch (e.Action)
{
case NotifyCollectionChangedAction.Add:
{
var count = e.NewItems.Count;
for (var i = 0; i < count; i++)
{
NotifyItemInserted(e.NewStartingIndex + i);
}
}
break;
case NotifyCollectionChangedAction.Remove:
{
var count = e.OldItems.Count;
Console.WriteLine($"Count: {count}");
for (var i = 0; i < count; i++)
{
NotifyItemRemoved(e.OldStartingIndex + i);
var item = e.OldItems[i];
if (Equals(SelectedItem, item))
{
SelectedItem = default(TItem);
}
}
}
break;
default:
NotifyDataSetChanged();
break;
}
};
act();
}
private void RaiseSelectionChanged()
{
var handler = SelectionChanged;
if (handler != null)
{
handler(this, EventArgs.Empty);
}
}
/// <summary>
/// Occurs when a property of this instance changes.
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// Occurs when a new item gets selected in the UICollectionView.
/// </summary>
public event EventHandler SelectionChanged;
}
}

Просмотреть файл

Просмотреть файл

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Xamarin.Android.Support.v4" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.RecyclerView" version="23.3.0" targetFramework="monoandroid60" />
</packages>

Просмотреть файл

@ -22,7 +22,7 @@
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG;XAMARIN;ANDROID</DefineConstants>
<DefineConstants>TRACE;XAMARIN;ANDROID;DEBUG</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\Debug\GalaSoft.MvvmLight.Platform.XML</DocumentationFile>
@ -70,12 +70,6 @@
<Compile Include="Views\DialogService.cs" />
<Compile Include="Views\NavigationService.cs" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\AboutResources.txt" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\Values\Strings.xml" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\GalaSoft.MvvmLight %28PCL%29\GalaSoft.MvvmLight %28PCL%29.csproj">
<Project>{6a912701-3ba1-4975-adbf-160caf66b640}</Project>

Просмотреть файл

@ -1,50 +0,0 @@
Images, layout descriptions, binary blobs and string dictionaries can be included
in your application as resource files. Various Android APIs are designed to
operate on the resource IDs instead of dealing with images, strings or binary blobs
directly.
For example, a sample Android app that contains a user interface layout (main.xml),
an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png)
would keep its resources in the "Resources" directory of the application:
Resources/
drawable-hdpi/
icon.png
drawable-ldpi/
icon.png
drawable-mdpi/
icon.png
layout/
main.xml
values/
strings.xml
In order to get the build system to recognize Android resources, set the build action to
"AndroidResource". The native Android APIs do not operate directly with filenames, but
instead operate on resource IDs. When you compile an Android application that uses resources,
the build system will package the resources for distribution and generate a class called
"Resource" that contains the tokens for each one of the resources included. For example,
for the above Resources layout, this is what the Resource class would expose:
public class Resource {
public class drawable {
public const int icon = 0x123;
}
public class layout {
public const int main = 0x456;
}
public class strings {
public const int first_string = 0xabc;
public const int second_string = 0xbcd;
}
}
You would then use R.drawable.icon to reference the drawable/icon.png file, or Resource.layout.main
to reference the layout/main.xml file, or Resource.strings.first_string to reference the first
string in the dictionary file values/strings.xml.

Просмотреть файл

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="Hello">Hello World, Click Me!</string>
<string name="ApplicationName">$projectname$</string>
</resources>

Просмотреть файл

@ -47,8 +47,22 @@
<Reference Include="System.Core" />
<Reference Include="System.Xml" />
<Reference Include="Xamarin.Android.NUnitLite" />
<Reference Include="Xamarin.Android.Support.v4, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\Xamarin.Android.Support.v4.23.3.0\lib\MonoAndroid403\Xamarin.Android.Support.v4.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Xamarin.Android.Support.v7.RecyclerView, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\Xamarin.Android.Support.v7.RecyclerView.23.3.0\lib\MonoAndroid403\Xamarin.Android.Support.v7.RecyclerView.dll</HintPath>
<Private>True</Private>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="..\..\GalaSoft.MvvmLight.AndroidSupport\Helpers\CachingViewHolder.cs">
<Link>Helpers\CachingViewHolder.cs</Link>
</Compile>
<Compile Include="..\..\GalaSoft.MvvmLight.AndroidSupport\Helpers\ObservableRecyclerAdapter.cs">
<Link>Helpers\ObservableRecyclerAdapter.cs</Link>
</Compile>
<Compile Include="..\..\GalaSoft.MvvmLight.Platform %28Android%29\Helpers\Binding.cs">
<Link>Helpers\Binding.cs</Link>
</Compile>
@ -123,6 +137,7 @@
<Compile Include="ViewModel\TestViewModel.cs" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
<None Include="Resources\AboutResources.txt" />
<None Include="Assets\AboutAssets.txt" />
</ItemGroup>

Просмотреть файл

@ -53,6 +53,18 @@ namespace GalaSoft.MvvmLight.Test
public partial class Attribute
{
// aapt resource value: 0x7f010000
public const int layoutManager = 2130771968;
// aapt resource value: 0x7f010002
public const int reverseLayout = 2130771970;
// aapt resource value: 0x7f010001
public const int spanCount = 2130771969;
// aapt resource value: 0x7f010003
public const int stackFromEnd = 2130771971;
static Attribute()
{
global::Android.Runtime.ResourceIdManager.UpdateIdValues();
@ -63,6 +75,28 @@ namespace GalaSoft.MvvmLight.Test
}
}
public partial class Dimension
{
// aapt resource value: 0x7f040000
public const int item_touch_helper_max_drag_scroll_per_frame = 2130968576;
// aapt resource value: 0x7f040001
public const int item_touch_helper_swipe_escape_max_velocity = 2130968577;
// aapt resource value: 0x7f040002
public const int item_touch_helper_swipe_escape_velocity = 2130968578;
static Dimension()
{
global::Android.Runtime.ResourceIdManager.UpdateIdValues();
}
private Dimension()
{
}
}
public partial class Drawable
{
@ -82,59 +116,62 @@ namespace GalaSoft.MvvmLight.Test
public partial class Id
{
// aapt resource value: 0x7f050001
public const int OptionHostName = 2131034113;
// aapt resource value: 0x7f050002
public const int OptionPort = 2131034114;
// aapt resource value: 0x7f050000
public const int OptionRemoteServer = 2131034112;
// aapt resource value: 0x7f050010
public const int OptionsButton = 2131034128;
// aapt resource value: 0x7f05000b
public const int ResultFullName = 2131034123;
// aapt resource value: 0x7f05000d
public const int ResultMessage = 2131034125;
// aapt resource value: 0x7f05000c
public const int ResultResultState = 2131034124;
// aapt resource value: 0x7f05000a
public const int ResultRunSingleMethodTest = 2131034122;
// aapt resource value: 0x7f05000e
public const int ResultStackTrace = 2131034126;
// aapt resource value: 0x7f050006
public const int ResultsFailed = 2131034118;
public const int OptionHostName = 2131034114;
// aapt resource value: 0x7f050003
public const int ResultsId = 2131034115;
public const int OptionPort = 2131034115;
// aapt resource value: 0x7f050007
public const int ResultsIgnored = 2131034119;
// aapt resource value: 0x7f050008
public const int ResultsInconclusive = 2131034120;
// aapt resource value: 0x7f050009
public const int ResultsMessage = 2131034121;
// aapt resource value: 0x7f050005
public const int ResultsPassed = 2131034117;
// aapt resource value: 0x7f050004
public const int ResultsResult = 2131034116;
// aapt resource value: 0x7f05000f
public const int RunTestsButton = 2131034127;
// aapt resource value: 0x7f050001
public const int OptionRemoteServer = 2131034113;
// aapt resource value: 0x7f050011
public const int TestSuiteListView = 2131034129;
public const int OptionsButton = 2131034129;
// aapt resource value: 0x7f05000c
public const int ResultFullName = 2131034124;
// aapt resource value: 0x7f05000e
public const int ResultMessage = 2131034126;
// aapt resource value: 0x7f05000d
public const int ResultResultState = 2131034125;
// aapt resource value: 0x7f05000b
public const int ResultRunSingleMethodTest = 2131034123;
// aapt resource value: 0x7f05000f
public const int ResultStackTrace = 2131034127;
// aapt resource value: 0x7f050007
public const int ResultsFailed = 2131034119;
// aapt resource value: 0x7f050004
public const int ResultsId = 2131034116;
// aapt resource value: 0x7f050008
public const int ResultsIgnored = 2131034120;
// aapt resource value: 0x7f050009
public const int ResultsInconclusive = 2131034121;
// aapt resource value: 0x7f05000a
public const int ResultsMessage = 2131034122;
// aapt resource value: 0x7f050006
public const int ResultsPassed = 2131034118;
// aapt resource value: 0x7f050005
public const int ResultsResult = 2131034117;
// aapt resource value: 0x7f050010
public const int RunTestsButton = 2131034128;
// aapt resource value: 0x7f050012
public const int TestSuiteListView = 2131034130;
// aapt resource value: 0x7f050000
public const int item_touch_helper_previous_elevation = 2131034112;
static Id()
{
@ -174,11 +211,11 @@ namespace GalaSoft.MvvmLight.Test
public partial class String
{
// aapt resource value: 0x7f040001
public const int ApplicationName = 2130968577;
// aapt resource value: 0x7f060001
public const int ApplicationName = 2131099649;
// aapt resource value: 0x7f040000
public const int Hello = 2130968576;
// aapt resource value: 0x7f060000
public const int Hello = 2131099648;
static String()
{
@ -189,6 +226,41 @@ namespace GalaSoft.MvvmLight.Test
{
}
}
public partial class Styleable
{
public static int[] RecyclerView = new int[] {
16842948,
2130771968,
2130771969,
2130771970,
2130771971};
// aapt resource value: 0
public const int RecyclerView_android_orientation = 0;
// aapt resource value: 1
public const int RecyclerView_layoutManager = 1;
// aapt resource value: 3
public const int RecyclerView_reverseLayout = 3;
// aapt resource value: 2
public const int RecyclerView_spanCount = 2;
// aapt resource value: 4
public const int RecyclerView_stackFromEnd = 4;
static Styleable()
{
global::Android.Runtime.ResourceIdManager.UpdateIdValues();
}
private Styleable()
{
}
}
}
}
#pragma warning restore 1591

Просмотреть файл

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Xamarin.Android.Support.v4" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.RecyclerView" version="23.3.0" targetFramework="monoandroid60" />
</packages>

Просмотреть файл

@ -56,6 +56,13 @@ if exist ".\GalaSoft.MvvmLight.Platform (Android)\bin\Release\GalaSoft.MvvmLight
if exist ".\GalaSoft.MvvmLight.Platform (Android)\bin\Release\GalaSoft.MvvmLight.Platform.pdb" copy ".\GalaSoft.MvvmLight.Platform (Android)\bin\Release\GalaSoft.MvvmLight.Platform.pdb" .\_Binaries\Release\Android\GalaSoft.MvvmLight.Platform.pdb
if exist ".\GalaSoft.MvvmLight.Platform (Android)\bin\\Release\GalaSoft.MvvmLight.Platform.xml" copy ".\GalaSoft.MvvmLight.Platform (Android)\bin\Release\GalaSoft.MvvmLight.Platform.xml" .\_Binaries\Release\Android\GalaSoft.MvvmLight.Platform.xml
if exist ".\GalaSoft.MvvmLight.AndroidSupport\bin\Debug\GalaSoft.MvvmLight.Platform.AndroidSupport.dll" copy ".\GalaSoft.MvvmLight.AndroidSupport\bin\Debug\GalaSoft.MvvmLight.Platform.AndroidSupport.dll" .\_Binaries\Debug\Android\GalaSoft.MvvmLight.Platform.AndroidSupport.dll
if exist ".\GalaSoft.MvvmLight.AndroidSupport\bin\Debug\GalaSoft.MvvmLight.Platform.AndroidSupport.pdb" copy ".\GalaSoft.MvvmLight.AndroidSupport\bin\Debug\GalaSoft.MvvmLight.Platform.AndroidSupport.pdb" .\_Binaries\Debug\Android\GalaSoft.MvvmLight.Platform.AndroidSupport.pdb
if exist ".\GalaSoft.MvvmLight.AndroidSupport\bin\Debug\GalaSoft.MvvmLight.Platform.AndroidSupport.xml" copy ".\GalaSoft.MvvmLight.AndroidSupport\bin\Debug\GalaSoft.MvvmLight.Platform.AndroidSupport.xml" .\_Binaries\Debug\Android\GalaSoft.MvvmLight.Platform.AndroidSupport.xml
if exist ".\GalaSoft.MvvmLight.AndroidSupport\bin\Release\GalaSoft.MvvmLight.Platform.AndroidSupport.dll" copy ".\GalaSoft.MvvmLight.AndroidSupport\bin\Release\GalaSoft.MvvmLight.Platform.AndroidSupport.dll" .\_Binaries\Release\Android\GalaSoft.MvvmLight.Platform.AndroidSupport.dll
if exist ".\GalaSoft.MvvmLight.AndroidSupport\bin\Release\GalaSoft.MvvmLight.Platform.AndroidSupport.pdb" copy ".\GalaSoft.MvvmLight.AndroidSupport\bin\Release\GalaSoft.MvvmLight.Platform.AndroidSupport.pdb" .\_Binaries\Release\Android\GalaSoft.MvvmLight.Platform.AndroidSupport.pdb
if exist ".\GalaSoft.MvvmLight.AndroidSupport\bin\Release\GalaSoft.MvvmLight.Platform.AndroidSupport.xml" copy ".\GalaSoft.MvvmLight.AndroidSupport\bin\Release\GalaSoft.MvvmLight.Platform.AndroidSupport.xml" .\_Binaries\Release\Android\GalaSoft.MvvmLight.Platform.AndroidSupport.xml
if exist ".\GalaSoft.MvvmLight.Extras (PCL)\bin\Debug\Microsoft.Practices.ServiceLocation.dll" copy ".\GalaSoft.MvvmLight.Extras (PCL)\bin\Debug\Microsoft.Practices.ServiceLocation.dll" .\_Binaries\Debug\Android\Microsoft.Practices.ServiceLocation.dll
if exist ".\GalaSoft.MvvmLight.Extras (PCL)\bin\Debug\Microsoft.Practices.ServiceLocation.pdb" copy ".\GalaSoft.MvvmLight.Extras (PCL)\bin\Debug\Microsoft.Practices.ServiceLocation.pdb" .\_Binaries\Debug\Android\Microsoft.Practices.ServiceLocation.pdb
if exist ".\GalaSoft.MvvmLight.Extras (PCL)\bin\Debug\Microsoft.Practices.ServiceLocation.xml" copy ".\GalaSoft.MvvmLight.Extras (PCL)\bin\Debug\Microsoft.Practices.ServiceLocation.xml" .\_Binaries\Debug\Android\Microsoft.Practices.ServiceLocation.xml

Двоичные данные
GalaSoft.MvvmLight/packages/Xamarin.Android.Support.v4.23.3.0/Xamarin.Android.Support.v4.23.3.0.nupkg поставляемый Normal file

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.