绑定到MvvmCross中的Path ImageView for MonoDroid/Android

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)

更多这里

类似的问题

谢谢

Stu*_*art 5

快速回答:

  • 如果您的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); }
 }
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