1

Xamarin Studio で Mono 2.10.11 に対して iOS 予定アプリを実行しています。

予定の詳細画面では、結果に基づいて予定を評価できます。ビジネス ロジックに基づいたブール セットに基づいて、評価を許可するボタンが表示されます。バインドされたボタンは、評価画面を開くトリガーとなります。モバイルおよびデバッガーの iOS 6.1 と iOS 7 シミュレーターで正常に動作します。iOS 7 デバイスでは機能しません。

AppointView.cs には、次のようにボタンを設定する関数 ViewDidLoad が含まれています。

AppointmentViewTable.Source = _source;

this.AddBindings (new Dictionary<object, string>
{
    { _source, "{'ItemsSource':{'Path':'AppointmentDetails'}, 'HeaderTitle':{'Path':'Appointment.AppointmentDate','converter':'DateTime'}}" },
    { btnRateSession, "{'Hidden':{'Path':'Appointment.RateAvailable','converter':'InvertedVisibility'}, 'Title':{'Path':'TextSource','Converter':'Language','ConverterParameter':'btnRateSession'}, 'TouchDown':{'Path':'GoToSessionRateView'}}"}
});

予定ビューを作成してプログラムを実行すると、次の警告が表示されます。

2013-10-18 16:58:55.012 M2FitiOS[3773:a0b] MvxBind: Error:  14.12 Problem seen during binding execution for from Appointment.RateAvailable to Hidden - 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) [0x00017] in /Developer/MonoTouch/Source/mono/mcs/class/corlib/System/Convert.cs:2553 
at System.Convert.ChangeType (System.Object value, System.Type conversionType, IFormatProvider provider) [0x00017] in /Developer/MonoTouch/Source/mono/mcs/class/corlib/System/Convert.cs:2204 
at Cirrious.MvvmCross.Binding.ExtensionMethods.MvxTypeExtensions.MakeSafeValue (System.Type propertyType, System.Object value) [0x00000] in <filename unknown>:0 
at Cirrious.MvvmCross.Binding.Bindings.Target.MvxPropertyInfoTargetBinding.SetValue (System.Object value) [0x00000] in <filename unknown>:0 
at Cirrious.MvvmCross.Binding.Bindings.MvxFullBinding.UpdateTargetFromSource (Boolean isAvailable, System.Object value) [0x00000] in <filename unknown>:0

AppointmentViewModel にはイベントが含まれています:-

public ICommand GoToSessionRateView
{
    get
        {
            return new MvxRelayCommand(() => RequestNavigate<SessionRateViewModel>(new { appointmentId = _appointmentId }));
        }
    }

イベントが機能しなくなった原因がわかりません。任意のポインタをいただければ幸いです。

4

1 に答える 1

4

一般に、デバイスで動作しない問題は Xamarin の "リンカー" が原因であり、多くのオプションを使用して回避できます - 「xamarin.ios/monotouch 、 mvvmcross およびリンクに関するトラブル」を参照してください。

これが発生した場合、私の推奨オプションはLinkerPleaseInclude.csファイルを使用することです- https://github.com/MvvmCross/MvvmCross-Tutorials/blob/master/ApiExamples/ApiExamples.Touch/LinkerPleaseInclude.csのように

これが問題である場合は、LinkerPleaseInclude にTouchDown参照が含まれていることを確認する必要がありますが、代わりにバインディングを実際に変更した方がよい場合がありますTouchUpInside


その間、あなたが持っているトレースはエラーを示していますAppointment.RateAvailable to Hidden-ios7でなぜそれが異なるべきなのか混乱しています。この古いバージョンの MvvmCross で問題を解決する最も簡単な方法は、アップグレードすることだと思いconverterます Converter

于 2013-10-18T17:59:18.620 に答える