简体   繁体   English

未调用MVVMCross iOS自定义可见性转换器

[英]MVVMCross iOS custom visibility converter not being called

I have a visibility converter for lists that functions perfectly on Android, but I cannot get the Convert method to be called in iOS. 我有一个可见性转换器,用于在Android上完美运行的列表,但是我无法在iOS中调用Convert方法。

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... 我在ViewController的ViewDidLoad中的绑定中使用转换器...

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... 在Setup.cs中,我已确认使用以下代码找到了转换器...

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. 在iOS项目的设置中覆盖ValueConverterAssemblies并手动添加值转换器解决了该问题。

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;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM