1

使用 MvvmCross,我试图将 TextView 的 android:visibility 绑定到类似于“Results.Count”的路径,并设置一个转换器以将整数转换为可见性(如果不是 null 且大于零,则 TextView 是可见的)。

如果 Results 为 null,则在应用程序输出中显示错误:

[MvxBind] 1.34 从 SearchResult.Count 到 Visibility 的绑定执行期间出现的问题 - 问题 InvalidCastException:无法将 Null 对象转换为值类型。System.Convert.ToType 处的 [MvxBind](System.Object 值,System.Type 转换类型,IFormatProvider 提供程序,布尔 try_target_to_type) [0x00000] 在 System.Convert.ChangeType 处的 [0x00000] [MvxBind](System.Object 值,System.Type转换类型,IFormatProvider 提供程序)[0x00000] in :0 [MvxBind] at Cirrious.MvvmCross.Binding.ExtensionMethods.MvxTypeExtensions.MakeSafeValue(System.Type propertyType,System.Object 值)[0x00000] in :0 [MvxBind] at Cirrious.MvvmCross .Binding.Bindings.Target.MvxPropertyInfoTargetBinding.MakeSafeValue (System.Object 值) [0x00000] in :0 [MvxBind]
在 Cirrious.MvvmCross.Binding.Bindings.Target.MvxPropertyInfoTargetBinding.SetValue (System.Object 值) [0x00000] in :0 [MvxBind]
在 Cirrious.MvvmCross.Binding.Bindings.MvxFullBinding.UpdateTargetFromSource (Boolean isAvailable, System.Object value) [0x00000] in :0 MvxBind:Error: 1.34 从 SearchResult.Count 到 Visibility 的绑定执行期间出现的问题 - 问题 InvalidCastException: Null 对象无法转换为值类型。MvxBind:错误:1.34 从 SearchResult.Count 到 Visibility 的绑定执行期间出现的问题 - 问题 InvalidCastException:无法将 Null 对象转换为值类型。在 System.Convert.ToType(System.Object 值,System.Type conversionType,IFormatProvider 提供程序,布尔 try_target_to_type)[0x00000] 在 System.Convert.ChangeType 处:0(System.Object 值,System.Type 转换类型,IFormatProvider 提供程序)[ 0x00000] 在 :0

转换器不会被调用。我本来希望在这种情况下调用转换器,就像在 Silverlight 或 WPF 中一样。

我尝试通过源代码添加 MvvmCross 自己调试此问题(我从 github 添加了所有必要的项目)。我在异常调用堆栈中显示的不同方法中设置了断点(例如:Cirrious.MvvmCross.Binding.ExtensionMethods.MvxTypeExtensions.MakeSafeValue),但是在运行时,断点没有被命中,它们被调试器忽略了。

奇怪的是,在 MvvmCross 源代码的其他部分(如在 MvxAndroidSetup 中)设置断点有效。

除了转换器的问题,我想知道如何使断点在 MvvmCross 代码中工作。如果可能的话,它会让我了解更多,甚至参与到开发中。

4

1 回答 1

1

MvvmCross 与 Xaml 的绑定路径/计算之间存在细微差别。

特别是,我们知道FallbackValue它的解释和使用方式不同。这种不同的行为:

如果您有其他测试用例要添加到该列表中,请将它们作为 GitHub 存储库上传并将它们链接到该用例。(但不要期望对绑定代码进行“非常快速”的更改/修复 - 因为更改它可能会破坏许多现在依赖它的应用程序,并且MvxValueConverters通常构建为比传统IValueConverter的 Microsoft 应用程序更具类型特异性)


同时,对于这种特殊情况:

  • aFallbackValue可能适合您作为一种解决方法(但可能是枚举后备值可能很难在 xml 中执行)
  • 或者您可以使用自定义绑定
  • 或者您可以操纵 ViewModel 结构。

至于断点在 Xamarin.Android 的 PCL 中不起作用,这已记录在很多地方,并且 6 个月以来一直是一个主要的痛苦。根据https://bugzilla.xamarin.com/show_bug.cgi?id=8209这显然现在已在 Alpha 通道上修复,但可能永远不会出现在 4.6 中。

于 2013-06-08T23:36:12.117 回答