快速回答:
- 如果您的 Android 图像文件存储在
assets/images/i1.png
- 然后确保它被标记为
AndroidAsset
- 那么你的路径需要是
images/i1.png
更长的答案:
理想情况下,您的 ViewModel 应该独立于平台,并且不了解 View 问题。
因此,您的 ViewModel 可能会公开如下属性:
private GameState _state;
public GameState State
{
get { return _state; }
set { _state = value; RaisePropertyChanged(() => State); }
}
其中 GameState 是一个枚举,例如:
public enum GameState
{
Stopped,
Running,
Paused,
GameOver
}
然后,您可能会在资产结构中拥有代表这些状态的图像,例如:
/assets/gamestates/stopped.png
/assets/gamestates/running.png
/assets/gamestates/paused.png
/assets/gamestates/gameover.png
其中每个文件都标有 AndroidAsset 的 BuildAction。
要在 UI 中显示正确的图像,您需要一个值转换器,例如:
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());
}
}
使用转换器包装器进行映射,例如:
public class Converters
{
public readonly GameStateConverter GameState = new GameStateConverter();
}
它是在 setup.cs 中使用以下配置的:
protected override IEnumerable<Type> ValueConverterHolders
{
get { return new[] { typeof(Converters) }; }
}
完成此操作后,您的 axml 绑定语句将是:
{'AssetImagePath':{'Path':'State', 'Converter':'GameState'}}
有关使用资源而不是资产的替代方法,请参阅MvxButtonIconBinding
in 将 GridLayout 绑定到 Android 的问题 https://stackoverflow.com/questions/12914544/ssue-with-binding-to-gridlayout-to-android