I have a visibility converter for lists that functions perfectly on Android, but I cannot get the Convert method to be called in iOS.
public class ListVisibilityConverter : MvxBaseVisibilityValueConverter<IList>
{
protected override MvxVisibility Convert(IList value, object parameter, CultureInfo culture)
{
var inverse = false;
if (parameter != null)
{
inverse = (bool)parameter;
}
var listHasEntries = (value != null) && value.Count > 0;
if (inverse)
{
return listHasEntries ? MvxVisibility.Collapsed : MvxVisibility.Visible;
}
else
{
return listHasEntries ? MvxVisibility.Visible : MvxVisibility.Collapsed;
}
}
}
I use the converter in a binding within the ViewDidLoad of a ViewController...
var set = this.CreateBindingSet<AddFriendsFromContactsViewController, AddFriendsFromContactsViewModel>();
set.Bind(collectionView).For("Visibility").To(vm => vm.SectionedCollection).WithConversion("ListVisibility", true);
set.Bind(noContactsFoundLabel).For("Visibility").To(vm => vm.SectionedCollection).WithConversion("ListVisibility", false);
set.Apply();
In Setup.cs I've confirmed the converter is being found with the following code...
protected override void InitializeLastChance()
{
base.InitializeLastChance();
var registry = Mvx.Resolve<IMvxValueConverterLookup>();
var f = registry.Find(BindingStrings.ListVisibility);
Mvx.Trace("Custom converter was found : {0}", f != null);
}
Overriding ValueConverterAssemblies in the Setup of the iOS project and manually adding the value converter solved the issue.
protected override IEnumerable<Assembly> ValueConverterAssemblies
{
get
{
var assemblies = base.ValueConverterAssemblies;
var valueConverterAssemblies = assemblies as Assembly[] ?? assemblies.ToArray();
valueConverterAssemblies.ToList().Add(typeof(ListVisibilityConverter).Assembly);
return valueConverterAssemblies;
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.