And*_*eev 3 c# mono xamarin.android mvvmcross
在我的案例路径"MyZooSnap.Core;component/Resources/Images/i.jpg".如何转换Android的路径ImageView?为了在以下绑定中使用它:
{'AssetImagePath':{'Path':'ImagePath'}}
Run Code Online (Sandbox Code Playgroud)
谢谢
快速回答:
assets/images/i1.pngAndroidAssetimages/i1.png更长的回答:
理想情况下,您的ViewModel应该是独立于平台的,并且不了解View关注点.
所以你的ViewModel可能会暴露一个属性,如:
private GameState _state;
public GameState State
{
get { return _state; }
set { _state = value; RaisePropertyChanged(() => State); }
}
Run Code Online (Sandbox Code Playgroud)
其中GameState是一个枚举,如:
public enum GameState
{
Stopped,
Running,
Paused,
GameOver
}
Run Code Online (Sandbox Code Playgroud)
然后,您可能会在资产结构中拥有代表这些状态的图像,例如:
/assets/gamestates/stopped.png
/assets/gamestates/running.png
/assets/gamestates/paused.png
/assets/gamestates/gameover.png
Run Code Online (Sandbox Code Playgroud)
其中每个文件都标有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());
}
}
Run Code Online (Sandbox Code Playgroud)
使用转换器包装器映射,如:
public class Converters
{
public readonly GameStateConverter GameState = new GameStateConverter();
}
Run Code Online (Sandbox Code Playgroud)
使用以下命令在setup.cs中配置:
protected override IEnumerable<Type> ValueConverterHolders
{
get { return new[] { typeof(Converters) }; }
}
Run Code Online (Sandbox Code Playgroud)
有了这个,那么你的axml绑定语句将是:
{'AssetImagePath':{'Path':'State', 'Converter':'GameState'}}
Run Code Online (Sandbox Code Playgroud)
有关使用替代资产资源的替代方法,请参阅MvxButtonIconBinding在Іssue与结合网格布局到Android