Skip to content

Instantly share code, notes, and snippets.

@slodge
Created December 22, 2012 11:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save slodge/4358552 to your computer and use it in GitHub Desktop.
Save slodge/4358552 to your computer and use it in GitHub Desktop.
using System;
using System.Collections.Generic;
using Android.Content;
using Cirrious.MvvmCross.Binding.Binders.Json;
using Cirrious.MvvmCross.Binding.Droid;
using Cirrious.MvvmCross.Binding.Droid.Binders;
using Cirrious.MvvmCross.Binding.Droid.Simple;
using Cirrious.MvvmCross.Binding.Interfaces;
using Cirrious.MvvmCross.Binding.Interfaces.Binders;
using Cirrious.MvvmCross.Binding.Interfaces.Bindings.Target.Construction;
using Cirrious.MvvmCross.ExtensionMethods;
using Cirrious.MvvmCross.Interfaces.Converters;
using Cirrious.MvvmCross.Interfaces.ServiceProvider;
namespace SimpleDroid
{
public class CustomBindingParser : IMvxBindingDescriptionParser, IMvxServiceConsumer
{
public IEnumerable<MvxBindingDescription> Parse(string text)
{
// TODO - parse text
return new List<MvxBindingDescription>();
}
public MvxBindingDescription ParseSingle(string text)
{
// TODO - parse text
return new MvxBindingDescription();
}
// TODO - maybe refactor this somewhere else?
public MvxBindingDescription SerializableBindingToBinding(string targetName, MvxSerializableBindingDescription description)
{
return new MvxBindingDescription()
{
TargetName = targetName,
SourcePropertyPath = description.Path,
Converter = FindConverter(description.Converter),
ConverterParameter = description.ConverterParameter,
Mode = description.Mode,
FallbackValue = description.FallbackValue
};
}
private IMvxValueConverter FindConverter(string converterName)
{
if (string.IsNullOrEmpty(converterName))
return null;
return this.GetService<IMvxValueConverterProvider>().Find(converterName);
}
}
public class CustomBindingBuilder : MvxAndroidBindingBuilder
{
public CustomBindingBuilder(Action<IMvxTargetBindingFactoryRegistry> fillRegistryAction, Action<IMvxValueConverterRegistry> fillValueConvertersAction, Action<MvxViewTypeResolver> setupViewTypeResolver) : base(fillRegistryAction, fillValueConvertersAction, setupViewTypeResolver)
{
}
protected override void RegisterBindingParametersParser()
{
var parser = new CustomBindingParser();
this.RegisterServiceInstance<IMvxBindingDescriptionParser>(parser);
}
}
public class Setup
: MvxSimpleAndroidBindingSetup
{
public Setup(Context applicationContext)
: base(applicationContext, typeof(Converters.Converters))
{
}
protected override MvxAndroidBindingBuilder CreateBindingBuilder()
{
var bindingBuilder = new CustomBindingBuilder(FillTargetFactories, FillValueConverters, SetupViewTypeResolver);
return bindingBuilder;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment