Skip to content

Instantly share code, notes, and snippets.

View softlion's full-sized avatar

ZeBen softlion

View GitHub Profile
@softlion
softlion / ParallaxHeaderExtension.cs
Created January 5, 2018 08:16
Xamarin objc_getAssociatedObject / objc_setAssociatedObject snippet
public class ParallaxHeader : UIView
{
public UIScrollView ScrollView { get; set; }
}
public static class ParallaxHeaderExtension
{
private static readonly NSString DescriptiveName = new NSString("Vapolia." + nameof(ParallaxHeader));
enum AssociationPolicy {
@softlion
softlion / 01-Visibility2TargetBinding.md
Last active January 4, 2018 08:49
Mvvmcross tricks

Abstract

Mvvmcross includes a convert which translates a boolean into an MvxVisibility enumerable, and a target binding on each platform which translates an MvxVisibility to either a View.Visibility on Android, or an inverted boolean for UIView.Hidden on iOS.

Its usage requires to use a magic string ("Visibility") 2 times in the binding description. And it supports only boolean values in the viewmodel.

And last, it is distributed as a Mvvmcross plugin, which slows down the app's startup time, and crashes the app when the "link all" build option is activated", unless you add special code to prevent it. If you forget to add the plugin, it won't crash, it won't log, and you may search for your error a long time before remembering to add the plugin.

@softlion
softlion / SvgTabbedPageRenderer.cs
Created November 22, 2017 19:32
SvgTabbedPageRenderer to get icons on tab on Android with Xamarin.Forms (see https://github.com/softlion/XamSvg-Samples)
using System;
using System.Threading;
using Android.Content;
using Android.Support.Design.Widget;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android.AppCompat;
using XamSvg.Demo.Droid;
using XamSvg.XamForms;
[assembly:ExportRenderer(typeof(TabbedPage), typeof(SvgTabbedPageRenderer))]
@softlion
softlion / Interaction.cs
Created July 21, 2017 07:01
Better Mvvmcross Interactions
namespace Vapolia.Mvvmcross.Interactions
{
public class InteractionConverter<TRequest, TResult> : IMvxValueConverter
{
private readonly Func<TRequest, Task<TResult>> action;
public InteractionConverter()
{
}
using System;
using Foundation;
using MvvmCross.Binding;
using MvvmCross.Binding.Bindings.Target.Construction;
using MvvmCross.Binding.iOS.Target;
using MvvmCross.Platform.UI;
using UIKit;
namespace Vapolia.Ios.Lib.MvxUi
{
@softlion
softlion / Rotate180TargetBinding.cs
Created February 16, 2017 16:05
Mvvmcross Rotate180TargetBinding
/// <summary>
/// Usage:
/// set.Bind(AnyView).For(Rotate180TargetBinding.Name).To(vm => vm.AnyBooleanValue);
/// </summary>
public class Rotate180TargetBinding : MvxTargetBinding
{
private readonly WeakReference<UIView> weakView;
public const string Name = "Rotate180";
@softlion
softlion / MyTabbedRenderer.Droid.cs
Last active September 29, 2020 05:14
Custom Tabbed Renderer for Xamarin Forms to display Svg icons using XamSvg
using System.Threading;
using Android.App;
using Android.Graphics;
using Android.OS;
using Android.Util;
using Android.Views;
using Vapolia.Droid.Lib.Renderers;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
using XamSvg;
@softlion
softlion / MvxCachingFullFragmentCompatActivity.cs
Created September 16, 2016 19:00
MvxCachingFullFragmentCompatActivity
using System;
using System.Collections.Generic;
using System.Linq;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Util;
using Android.Views;
using MvvmCross.Core.ViewModels;
@softlion
softlion / MvxImageViewSvgDrawableTargetBinding.Android.cs
Created April 4, 2016 06:49
XamSvg mvvmcross 4.x android and ios target bindings
using System;
using Android.App;
using Android.Content;
using MvvmCross.Binding;
using MvvmCross.Binding.Bindings.Target.Construction;
using MvvmCross.Binding.Droid.Target;
using MvvmCross.Platform.Platform;
using XamSvg;
namespace Auchan.Droid.Mvvmcross.CustomBindings
@softlion
softlion / MvxSpinner2.cs
Created April 2, 2016 08:17
mvvmcross MvxSpinner support for material design (using AppCompatSpinner)
using System;
using System.Collections;
using System.Windows.Input;
using Android.Content;
using Android.Runtime;
using Android.Support.V7.Widget;
using Android.Util;
using MvvmCross.Binding.Attributes;
using MvvmCross.Binding.Droid.Views;