С MvvmCross я пытаюсь привязать android: видимость TextView к пути, подобному «Results.Count», с конвертером, который преобразует целое число в видимость (если не нуль и больше нуля, отображается TextView).привязка к пути не работает, когда первый элемент в пути пуст
Если результаты имеет нулевое значение, это показывает ошибку в выходе приложения:
[MvxBind] 1.34 Problem seen during binding execution for from SearchResult.Count to Visibility - problem InvalidCastException: Null object can not be converted to a value type. [MvxBind] at System.Convert.ToType (System.Object value, System.Type conversionType, IFormatProvider provider, Boolean try_target_to_type) [0x00000] in :0 [MvxBind] at System.Convert.ChangeType (System.Object value, System.Type conversionType, IFormatProvider provider) [0x00000] in :0 [MvxBind] at Cirrious.MvvmCross.Binding.ExtensionMethods.MvxTypeExtensions.MakeSafeValue (System.Type propertyType, System.Object value) [0x00000] in :0 [MvxBind] at Cirrious.MvvmCross.Binding.Bindings.Target.MvxPropertyInfoTargetBinding.MakeSafeValue (System.Object value) [0x00000] in :0 [MvxBind]
at Cirrious.MvvmCross.Binding.Bindings.Target.MvxPropertyInfoTargetBinding.SetValue (System.Object value) [0x00000] in :0 [MvxBind]
at Cirrious.MvvmCross.Binding.Bindings.MvxFullBinding.UpdateTargetFromSource (Boolean isAvailable, System.Object value) [0x00000] in :0 MvxBind:Error: 1.34 Problem seen during binding execution for from SearchResult.Count to Visibility - problem InvalidCastException: Null object can not be converted to a value type.MvxBind:Error: 1.34 Problem seen during binding execution for from SearchResult.Count to Visibility - problem InvalidCastException: Null object can not be converted to a value type. at System.Convert.ToType (System.Object value, System.Type conversionType, IFormatProvider provider, Boolean try_target_to_type) [0x00000] in :0 at System.Convert.ChangeType (System.Object value, System.Type conversionType, IFormatProvider provider) [0x00000] in :0
Преобразователь не дозвонились. Я бы ожидал, что конвертер будет вызываться в этом случае, как в Silverlight или WPF.
Я попытался самостоятельно отладить эту проблему, добавив MvvmCross по исходному коду (я добавил все необходимые проекты из github). Я установил точки останова в разных методах, показанных в стеке вызовов исключений (пример: Cirrious.MvvmCross.Binding.ExtensionMethods.MvxTypeExtensions.MakeSafeValue), но при запуске точки останова не пострадали, они были проигнорированы отладчиком.
Странно то, что настройка точки останова в других частях исходного кода MvvmCross (как в MvxAndroidSetup) работала.
Помимо проблемы с конвертером, я хотел бы знать, как заставить контрольные точки работать в коде MvvmCross. Это позволило бы мне больше понять и даже принять участие в проекте, если это возможно.
У меня сегодня был такой же вопрос. Это было немного поздно, поэтому я просто выключил компьютер и лег спать. Теперь Ай нашел здесь этот ответ.Спасибо Opcoder за вопрос и заговор для ответа. Завтра, я думаю, я поеду с опцией пользовательского связывания. Мне нравится создавать пользовательские привязки :) – zleao
Большое спасибо Stuart. Ранее я читал о проблемах отладки PCL, но я думал, что это касается VisualStudio. Я использую Xamarin Studio, и точки останова не попадают. У меня также есть другие проблемы, например, иногда возникающая ошибка при компиляции, и это не сработает, если я сначала не «перестрою все», после чего ошибка волшебным образом исчезнет. Стюарт, интересно, как вы можете разрабатывать и отлаживать проблемы MVVMCross с отладчиком, не попавшим на точки останова. Я попытаюсь посмотреть, доступен ли Debug.Break и вызовет отладчик. –
Привет Стюарт, есть ли конкретная причина, по которой пути привязки интерпретируются иначе, чем XAML? Я попробовал ваше предложение FallbackValue = ViewStates.Visible, но он не работает. Выполнение пользовательской привязки только по этой причине кажется слишком большим, тем более что я привязываю 4 элемента управления к различным свойствам этой модели результатов. Похоже, я должен реализовать 4 пользовательских привязки. Интересно, могу ли я реализовать свой собственный привязку, чтобы переопределить поведение MVVMCross, возможно ли это? К сожалению, без отладки, мне сложно понять, как это работает и что менять ... –