绑定到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
不行!
也应该工作