绑定到MvvmCross中的Path ImageView,用于MonoDroid / Android

在我的案例路径"MyZooSnap.Core;component/Resources/Images/i.jpg" 。 如何转换Android ImageView路径? 为了在以下绑定中使用它:

 {'AssetImagePath':{'Path':'ImagePath'}} 

更多这里

类似的问题

谢谢

快速回答:

  • 如果您的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 ValueConverterHolders { get { return new[] { typeof(Converters) }; } } 

有了这个,那么你的axml绑定语句将是:

  {'AssetImagePath':{'Path':'State', 'Converter':'GameState'}} 

有关使用资源而不是资源的替代方法,请参阅“ MvxButtonIconBinding中的MvxButtonIconBinding,并将GridLayout绑定到Android

我无法解决问题。 我的MainViewModel.cs

 public class MainMenuViewModel : MvxViewModel { private const string path = "myimage"; public List Items { get; set; } public IMvxCommand ShowItemCommand { get { return new MvxRelayCommand((type) => this.RequestNavigate(typeof(MainMenuViewModel))); } } public MainMenuViewModel() { Items = GetCollection(); } public List GetCollection() { List col = new List(); for (int i = 0; i < 20; i++) { col.Add(new SquareModel { ID = i, PathImage = path }); } return col; } } 

我的Converts.cs

 public class Converters { public readonly PathImageConverter GameImage = new PathImageConverter(); } 

我的PathImageConverter.cs

 public class PathImageConverter : MvxBaseValueConverter { public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return string.Format("squareresources/{0}.png", value.ToString().ToLower()); } } 

我的Setup.cs

 public class Setup : MvxBaseAndroidBindingSetup { public Setup(Context applicationContext) : base(applicationContext) { } protected override MvxApplication CreateApp() { return new App(); } protected override IEnumerable ValueConverterHolders { get { return new[] { typeof(Converters.Converters) }; } } } 

我的GameView.axml

  

我的ItemImage.axml

  

/>

我的UI项目: 在此处输入图像描述

当图像放在文件夹Assets中并指示只是指示图片的名称 – 它的工作原理。 当它创建另一个文件夹并指定路径时:

 /asset/folder/image.png asset/folder/image.png /folder/image.png folder/image.png 

不行!

  

也应该工作