From StackOverflow
Quick answer:
- if your Android image file is stored in
assets/images/i1.png
- then make sure it is marked as an
AndroidAsset
- then your path needs to be
images/i1.png
Longer answer:
Ideally your ViewModel should be platform independent and not know about View concerns.
So your ViewModel might perhaps expose a property like:
private GameState _state;
public GameState State
{
get { return _state; }
set { _state = value; RaisePropertyChanged(() => State); }
}
where GameState is an enumeration like:
public enum GameState
{
Stopped,
Running,
Paused,
GameOver
}
you might then have images representing these states in an assets structure like:
/assets/gamestates/stopped.png
/assets/gamestates/running.png
/assets/gamestates/paused.png
/assets/gamestates/gameover.png
where each of those files is marked with BuildAction of AndroidAsset.
To then display the correct image in the UI, you would need a value converter like:
public class GameStateConverter
: MvxBaseValueConverter
{
public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return string.Format("gamestates/{0}.png", ((GameState)value).ToString().ToLower());
}
}
mapped in using a Converters wrapper like:
public class Converters
{
public readonly GameStateConverter GameState = new GameStateConverter();
}
which is configured in setup.cs using:
protected override IEnumerable<Type> ValueConverterHolders
{
get { return new[] { typeof(Converters) }; }
}
With this in place, then your axml binding statement would be:
{'AssetImagePath':{'Path':'State', 'Converter':'GameState'}}
For an alternative approach using resources instead of assets, see MvxButtonIconBinding
in Іssue with binding to GridLayout to Android
No comments:
Post a Comment