Привязка в тестовом приложении MvvmCross для Android не работает (TargetInvocationException)

Я пытаюсь пробиться через пример Xamarin Studio MvvmCross для Android. Я загрузил свою версию решения здесь: https://github.com/Krumelur/MvvmCrossTest

Моя среда - XS 4.0.13, X.iOS 7.0.2.7, X.Android 4.8.3. Все инди-издание.

Я попробовал версию из поста в блоге Стюарта, но не могу собрать ее, потому что для этого требуется Xamarin Business License из-за ссылки на System.ServiceModel, поэтому я не могу сравнить, будет ли она работать там.

При запуске приложения я получаю исключения ниже каждый раз, когда вводю символ в текстовое поле:

[0:] MvxBind:Error:132.38 SetValue failed with exception - TargetInvocationException: Exception has been thrown by the target of an invocation.
      at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0 
  at System.Reflection.MonoProperty.SetValue (System.Object obj, System.Object value, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] index, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0 
  at System.Reflection.PropertyInfo.SetValue (System.Object obj, System.Object value, System.Object[] index) [0x00000] in <filename unknown>:0 
  at Cirrious.MvvmCross.Binding.Bindings.Source.Leaf.MvxLeafPropertyInfoSourceBinding.SetValue (System.Object value) [0x00080] in c:\Projects\Misc\MVVMCROSS\Cirrious\Cirrious.MvvmCross.Binding\Bindings\Source\Leaf\MvxLeafPropertyInfoSourceBinding.cs:86 
InnerException was TypeLoadException: Could not load type 'System.Linq.Expressions.Expression' from assembly 'AndroidDemo.Core'.
      at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
  at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0 

  at Cirrious.MvvmCross.Binding.Bindings.Source.Leaf.MvxLeafPropertyInfoSourceBinding.SetValue (System.Object value) [0x00080] in c:\Projects\Misc\MVVMCROSS\Cirrious\Cirrious.MvvmCross.Binding\Bindings\Source\Leaf\MvxLeafPropertyInfoSourceBinding.cs:86 
InnerException was TypeLoadException: Could not load type 'System.Linq.Expressions.Expression' from assembly 'AndroidDemo.Core'.
      at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
  at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0 

2 ответа

Решение

В баге есть ошибка System.Linq.Expressions.Expression когда у него был основной проект в виде PCL, и о нем сообщалось на Bugzilla Xamarin.

Вы можете следовать инструкциям там и сделать свою собственную сборку фасада или, в качестве альтернативы, в вашем ViewModel изменить RaisePropertyChanged от:

RaisePropertyChanged(() => this.Foo);

чтобы:

RaisePropertyChanged("Foo");

Ваш тестовый проект сработал впервые здесь

Скриншот

Мои детали:

Xamarin Studio
Version 4.0.12 (build 3)
Installation UUID: 683340a3-6ed3-4d10-ba59-9fc326c5ff7c
Runtime:
    Mono 3.2.3 ((no/8d3b4b7)
    GTK 2.24.20
    GTK# (2.12.0.0)
    Package version: 302030000

Apple Developer Tools
Xcode 5.0 (3332.25)
Build 5A1413

Xamarin.Mac
Xamarin.Mac: Not Installed

Xamarin.Android
Version: 4.8.1 (Business Edition)
Android SDK: /Users/stuartlodge/Library/Developer/Xamarin/android-sdk-mac_x86
    Supported Android versions:
        1.6   (API level 4)
        2.1   (API level 7)
        2.2   (API level 8)
        2.3   (API level 10)
        3.1   (API level 12)
        4.0   (API level 14)
        4.0.3 (API level 15)
        4.2   (API level 17)
Java SDK: /usr
java version "1.6.0_51"
Java(TM) SE Runtime Environment (build 1.6.0_51-b11-457-11M4509)
Java HotSpot(TM) 64-Bit Server VM (build 20.51-b01-457, mixed mode)

Xamarin.iOS
Version: 7.0.1.4 (Business Edition)
Hash: 4cfca2f
Branch: 
Build date: 2013-20-09 23:14:32-0400

Build Information
Release ID: 400120003
Git revision: 593d7acb1cb78ceeeb482d5133cf1fe514467e39
Build date: 2013-08-07 20:30:53+0000
Xamarin addins: 25a0858b281923e666b09259ad4746b774e0a873

Operating System
Mac OS X 10.8.5
Darwin Stuarts-MacBook-Air.local 12.5.0 Darwin Kernel Version 12.5.0
    Mon Jul 29 16:33:49 PDT 2013
    root:xnu-2050.48.11~1/RELEASE_X86_64 x86_64

Учитывая, что у Xamarin ранее были проблемы с System.Linq.Expressions.ExpressionВозможно, это что-то сломалось между Xamarin.Android 4.8.1 и 4.8.3?

... так что я обновил...

и да, я вижу те же проблемы, которые вы видите на 4.8.3

Таким образом, похоже, что Xamarin отправил больше стабильных обновлений PCL, не проверяя их на наличие известных проблем:(

Чтобы обойти это:

  • вы можете откатиться до 4.8.1
  • ты можешь использовать RaisePropertyChanged("Foo") вместо RaisePropertyChanged(() => Foo)
Другие вопросы по тегам