我正在使用mvvmcross for android app。我正在尝试为每个按钮创建一组具有特定图像的动态radiobuttons。除了没有图像外,一切都很顺利。
父斧:
<Mvx.MvxRadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/textLanguage"
android:layout_alignLeft="@id/textLanguage"
android:layout_marginLeft="20dp"
local:MvxItemTemplate="@layout/radioitem"
local:MvxBind="ItemsSource LanguageImageList;SelectedItem SelectedLanguage" />
RadioItem.axml:
<RadioButton xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
local:MvxBind="Text Key; Bitmap Value, Converter=MvxImageConverter" />
我的转换器:
public class MvxImageConverter : MvxValueConverter<string, Bitmap>
{
protected override Bitmap Convert(string value, Type targetType, object parameter, CultureInfo cultureInfo)
{
var imageLoader = Mvx.Resolve<IMvxLocalFileImageLoader<Bitmap>>();
MvxImage<Bitmap> image = imageLoader.Load(value, true);
return image.RawImage;
}
}
在调试器中调用convertor方法并且 image.RawImage 不是 null 或为空。
最后是viewModel:
private string _selectedLanguage;
public string SelectedLanguage
{
get { return _selectedLanguage; }
set
{
_selectedLanguage = value;
RaisePropertyChanged(() => SelectedLanguage);
LanguageChanged();
}
}
public Dictionary<string, string> LanguageImageList
{
get { return new Dictionary<string, string>() { { "US", "res:lang_us_small" }, { "UK", "res:lang_uk_small" }, { "FR", "res:lang_fr_small" }, { "GE", "res:lang_ge_small" } }; }
}
我尝试了不同的绑定关键字而不是“Bitmap”:“DrawableId”,“DrawableName”,“Image”,“ImageUrl”,“Button”,“Style”。没运气。在输出中,我总是看到消息,该值无法绑定到指定的关键字。
如果我在父axml中创建静态单选按钮并为每个单选按钮提供图像的特定链接,我可以看到图像但绑定不起作用,即不调用 SelectedLanguage 的setter。顺便说一句我不喜欢这个解决方案。
mvvmcross是否有可能为每个按钮创建一个动态(或至少是静态)的单选按钮组?
所需图片:http://i.stack.imgur.com/elIap.png
更新:我已经为简单复制创建了示例项目:https://github.com/midmmi/mvvmcross_radio_buttons