MVVMCross привязывает ImageView к идентификатору ресурса android вместо пути к ресурсам

У меня есть макет с ImageView в нем. Я хочу показать другое изображение, в зависимости от логики в моем основном проекте. Добавление изображений в папку с активами и их привязка к конвертеру. Для моего ValueConverter:

public class MyImageValueConverter : MvxValueConverter<mymap, string="">
{

 protected override string Convert(MyMap value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
 {
 return GetResourcePath(value);
 }

 private string GetResourcePath(MyMap map)
 { 
 string path = "";

 switch (map)
 {
 case MyMap.Map1:
 path = "map1.png";
 break;
 case MyMap.Map2:
 path = "map2.png";
 break;
 default:
 throw new Exception("no image for map: " + map.ToString());
 }

 return path;
 }
}
</mymap,>

На мой взгляд, я связываю это следующим образом:

...
var map = FindViewById<mvximageview>(Resource.Id.my_imageview);
set.Bind(map).For("AssetImagePath").To(vm => vm.CurrentMap).WithConversion("MyImage");
...
</mvximageview>

Теперь на мой вопрос. Я бы очень предпочел вместо этого установить образ из ресурса, но я не нашел способ сделать это. Я чувствую, что должен просто вернуть идентификатор ресурса из моего конвертера и привязать его к некоторому свойству (которое?).

В качестве альтернативы я мог бы просто создать новый класс, который наследует MvxImageView и добавить свойство, с которым я мог бы сделать одностороннюю привязку, которая вызывает SetImageResource(). Или даже выполнить полный способ привязки. Ничто из этого не кажется очень приятным.

1 ответ

Привязать к MvxImageView DrawableId

Посмотрите на MvxAndroidBindingBuilder, у него есть некоторые скрытые камни:

https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Binding.Droid/MvxAndroidBindingBuilder.cs#L103

licensed under cc by-sa 3.0 with attribution.