我将一个较旧的android项目从mvvmcross v2更新为mvvmcross v3。
现在又遇到了一个问题。
能见度不起作用,它什么都不做。
旧解决方案看起来像这样(工作正常):
在Setup.cs中
protected override IEnumerable<Type> ValueConverterHolders
{
get { return new[] { typeof(Converters) }; }
}
Converters.cs
using Cirrious.MvvmCross.Converters.Visibility;
namespace Test.Droid
{
public class Converters
{
public readonly MvxVisibilityConverter Visibility = new MvxVisibilityConverter();
}
}
任何.axml(更改LinearLayout的可见性):
<LinearLayout style="@style/LinearLayoutSmall" local:MvxBind="{'Visibility':{'Path':'TestIsVisible','Converter':'Visibility'}}">
新解决方案(不起作用):
在Setup.cs中
protected override List<Type> ValueConverterHolders
{
get { return new List<Type> { typeof(Converters) }; }
}
Converters.cs
using Cirrious.MvvmCross.Plugins.Visibility;
namespace Test.Droid
{
public class Converters
{
public readonly MvxVisibilityValueConverter Visibility = new MvxVisibilityValueConverter();
}
}
任何.axml
<LinearLayout style="@style/LinearLayoutSmall" local:MvxBind="Visibility TestIsVisible, Converter=Visibility">
swissbinding语法可能有问题,或者我使用假类? 任何帮助表示赞赏!
更新
我忘记了这些界限:
public override void LoadPlugins(IMvxPluginManager pluginManager)
{
pluginManager.EnsurePluginLoaded<PluginLoader>();
pluginManager.EnsurePluginLoaded<Cirrious.MvvmCross.Plugins.Visibility.PluginLoader>();
base.LoadPlugins(pluginManager);
}
我想这是必要的,但现在我有以下错误:
(来自MvxPluginManager类)...... 我检查了所有引用,并在我的主项目和其他地方引用了dll / project * .Visibility.Droid.dll ......
答案 0 :(得分:1)
如果没有运行和调试代码的完整示例,我无法看到问题所在。一个猜测是它可以在插件设置中进行可见性,但这只是猜测。您的应用的调试跟踪可能会显示有关此内容的一些信息。
或者,简单地尝试设置新项目并获得可见性,然后将该代码与现有应用进行比较可能会更容易。
v3中的值转换器记录在https://github.com/MvvmCross/MvvmCross/wiki/Value-Converters。
中引用它们的首选方法是让MvvmCross通过反射找到它们 - 请参阅https://github.com/MvvmCross/MvvmCross/wiki/Value-Converters#referencing-value-converters-in-touch-and-droid
部分示例应用,包括可见性,位于:https://github.com/MvvmCross/MvvmCross-Tutorials/tree/master/ValueConversion - 例如https://github.com/MvvmCross/MvvmCross-Tutorials/blob/master/ValueConversion/ValueConversion.UI.Droid/Resources/Layout/View_Visibility.axml