在MvvmCross中使用MvxGridView

在MvvmCross中使用MvxGridView

本文介绍了在MvvmCross中使用MvxGridView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想做的是一个简单的屏幕,显示一个网格中的多个项目.可以在Android上使用GridView轻松将其存档.

What I want to do is s simple screen showing multiple items in a Grid. This can on android easily be archived using a GridView.

在MvvmCross中,我想我必须使用MvxGridView对其进行存档.

In MvvmCross I guess I have to use MvxGridView to archive the same.

这是我的axml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
  <Mvx.MvxGridView
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     local:MvxBind="ItemsSource Items"
     local:MvxItemTemplate="@layout/itemview" />
</LinearLayout>

itemview:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:minWidth="25px"
    android:minHeight="25px">
    <TextView
        android:text="Text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView1"
        local:MvxBind="Text Name" />
</LinearLayout>

我的ViewModel:

My ViewModel:

using System.Collections.ObjectModel;
using Cirrious.MvvmCross.ViewModels;

namespace GridViewBug.Core.ViewModels
{
    public class FirstViewModel
        : MvxViewModel
    {
        public FirstViewModel()
        {
            Items = new ObservableCollection<TestClass>();
            Items.Add(new TestClass { Name = "Test1" });
            Items.Add(new TestClass { Name = "Test2" });
        }

        private string _hello = "Hello MvvmCross";
        public string Hello
        {
            get { return _hello; }
            set { _hello = value; RaisePropertyChanged(() => Hello); }
        }

        public ObservableCollection<TestClass> Items { get; set; }
    }

    public class TestClass
    {
        public string Name { get; set; }
    }
}

这是我运行此示例时发生的情况:

And here what happens when I run this example:

05-03 16:18:32.799 I/MvxBind ( 7960):   0.84 Problem seen during binding execution for from Items to ItemsSource - problem TargetInvocationException: Exception has been thrown by the target of an invocation.
05-03 16:18:32.799 I/MvxBind ( 7960):     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
05-03 16:18:32.799 I/MvxBind ( 7960):   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
05-03 16:18:32.799 I/MvxBind ( 7960):   at System.Reflection.PropertyInfo.SetValue (System.Object obj, System.Object value, System.Object[] index) [0x00000] in <filename unknown>:0
05-03 16:18:32.799 I/MvxBind ( 7960):   at Cirrious.MvvmCross.Binding.Bindings.Target.MvxPropertyInfoTargetBinding.SetValue (System.Object value) [0x00000] in <filename unknown>:0
05-03 16:18:32.799 I/MvxBind ( 7960):   at Cirrious.MvvmCross.Binding.Bindings.MvxFullBinding.UpdateTargetFromSource (Boolean isAvailable, System.Object value) [0x00000] in <filename unknown>:0
05-03 16:18:32.799 I/MvxBind ( 7960): InnerException was UnsupportedOperationException: Exception of type 'Java.Lang.UnsupportedOperationException' was thrown.
05-03 16:18:32.799 I/MvxBind ( 7960):     at Android.Runtime.JNIEnv.CallNonvirtualVoidMethod (IntPtr jobject, IntPtr jclass, IntPtr jmethod) [0x00023] in /Users/builder/data/lanes/monodroid-lion-bs1/03814ac5/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:604
05-03 16:18:32.799 I/MvxBind ( 7960):   at Android.Views.ViewGroup.RemoveAllViews () [0x00053] in /Users/builder/data/lanes/monodroid-lion-bs1/03814ac5/source/monodroid/src/Mono.Android/platforms/android-8/src/generated/Android.Views.ViewGroup.cs:2582
05-03 16:18:32.799 I/MvxBind ( 7960):   at Cirrious.MvvmCross.Binding.Droid.Views.MvxViewGroupExtensions.Refill (Android.Views.ViewGroup viewGroup, IAdapter adapter) [0x00000] in <filename unknown>:0
05-03 16:18:32.799 I/MvxBind ( 7960):   at Cirrious.MvvmCross.Binding.Droid.Views.MvxViewGroupExtensions.UpdateDataSetFromChange[MvxGridView] (Cirrious.MvvmCross.Binding.Droid.Views.MvxGridView viewGroup, System.Object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs eventArgs) [0x00000] in <filename unknown>:0
05-03 16:18:32.799 I/MvxBind ( 7960):   at Cirrious.MvvmCross.Binding.Droid.Views.MvxGridView.AdapterOnDataSetChanged (System.Object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs eventArgs) [0x00000] in <filename unknown>:0
05-03 16:18:32.799 I/MvxBind ( 7960):   at (wrapper delegate-invoke) <Module>:invoke_void__this___object_NotifyCollectionChangedEventArgs (object,System.Collections.Specialized.NotifyCollectionChangedEventArgs)
05-03 16:18:32.799 I/MvxBind ( 7960):   at Cirrious.MvvmCross.Binding.Droid.Views.MvxAdapterWithChangedEvent.NotifyDataSetChanged (System.Collections.Specialized.NotifyCollectionChangedEventArgs e) [0x00000] in <filename unknown>:0
05-03 16:18:32.799 I/MvxBind ( 7960):   at Cirrious.MvvmCross.Binding.Droid.Views.MvxAdapterWithChangedEvent.NotifyDataSetChanged () [0x00000] in <filename unknown>:0
05-03 16:18:32.799 I/MvxBind ( 7960):   at Cirrious.MvvmCross.Binding.Droid.Views.MvxAdapter.SetItemsSource (IEnumerable value) [0x00000] in <filename unknown>:0
05-03 16:18:32.799 I/MvxBind ( 7960):   at Cirrious.MvvmCross.Binding.Droid.Views.MvxAdapter.set_ItemsSource (IEnumerable value) [0x00000] in <filename unknown>:0
05-03 16:18:32.799 I/MvxBind ( 7960):   at Cirrious.MvvmCross.Binding.Droid.Views.MvxGridView.set_ItemsSource (IEnumerable value) [0x00000] in <filename unknown>:0
05-03 16:18:32.799 I/MvxBind ( 7960):   at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
05-03 16:18:32.799 I/MvxBind ( 7960):   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
05-03 16:18:32.799 I/MvxBind ( 7960):   --- End of managed exception stack trace ---
05-03 16:18:32.799 I/MvxBind ( 7960): java.lang.UnsupportedOperationException: removeAllViews() is not supported in AdapterView
05-03 16:18:32.799 I/MvxBind ( 7960):   at android.widget.AdapterView.removeAllViews(AdapterView.java:521)
05-03 16:18:32.799 I/MvxBind ( 7960):   at cirrious.mvvmcross.binding.droid.binders.MvxBindingLayoutInflatorFactory.n_onCreateView(Native Method)
05-03 16:18:32.799 I/MvxBind ( 7960):   at cirrious.mvvmcross.binding.droid.binders.MvxBindingLayoutInflatorFactory.onCreateView(MvxBindingLayoutInflatorFactory.java:29)
05-03 16:18:32.799 I/MvxBind ( 7960):   at android.view.LayoutInflater.createViewFromTag(Layo
05-03 16:18:32.799 I/mono-stdout( 7960): MvxBind:Error:  0.84 Problem seen during binding execution for from Items to ItemsSource - problem TargetInvocationException: Exception has been thrown by the target of an invocation.
05-03 16:18:32.799 I/mono-stdout( 7960):      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
05-03 16:18:32.799 I/mono-stdout( 7960):   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
05-03 16:18:32.799 I/mono-stdout( 7960):   at System.Reflection.PropertyInfo.SetValue (System.Object obj, System.Object value, System.Object[] index) [0x00000] in <filename unknown>:0
05-03 16:18:32.799 I/mono-stdout( 7960):   at Cirrious.MvvmCross.Binding.Bindings.Target.MvxPropertyInfoTargetBinding.SetValue (System.Object value) [0x00000] in <filename unknown>:0
05-03 16:18:32.809 I/mono-stdout( 7960):   at Cirrious.MvvmCross.Binding.Bindings.MvxFullBinding.UpdateTargetFromSource (Boolean isAvailable, System.Object value) [0x00000] in <filename unknown>:0
05-03 16:18:32.809 I/mono-stdout( 7960): InnerException was UnsupportedOperationException: Exception of type 'Java.Lang.UnsupportedOperationException' was thrown.
05-03 16:18:32.809 I/mono-stdout( 7960):      at Android.Runtime.JNIEnv.CallNonvirtualVoidMethod (IntPtr jobject, IntPtr jclass, IntPtr jmethod) [0x00023] in /Users/builder/data/lanes/monodroid-lion-bs1/03814ac5/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:604
05-03 16:18:32.809 I/mono-stdout( 7960):   at Android.Views.ViewGroup.RemoveAllViews () [0x00053] in /Users/builder/data/lanes/monodroid-lion-bs1/03814ac5/source/monodroid/src/Mono.Android/platforms/android-8/src/generated/Android.Views.ViewGroup.cs:2582
05-03 16:18:32.809 I/mono-stdout( 7960):   at Cirrious.MvvmCross.Binding.Droid.Views.MvxViewGroupExtensions.Refill (Android.Views.ViewGroup viewGroup, IAdapter adapter) [0x00000] in <filename unknown>:0
05-03 16:18:32.809 I/mono-stdout( 7960):   at Cirrious.MvvmCross.Binding.Droid.Views.MvxViewGroupExtensions.UpdateDataSetFromChange[MvxGridView] (Cirrious.MvvmCross.Binding.Droid.Views.MvxGridView viewGroup, System.Object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs eventArgs) [0x00000] in <filename unknown>:0
05-03 16:18:32.809 I/mono-stdout( 7960):   at Cirrious.MvvmCross.Binding.Droid.Views.MvxGridView.AdapterOnDataSetChanged (System.Object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs eventArgs) [0x00000] in <filename unknown>:0
05-03 16:18:32.809 I/mono-stdout( 7960):   at (wrapper delegate-invoke) <Module>:invoke_void__this___object_NotifyCollectionChangedEventArgs (object,System.Collections.Specialized.NotifyCollectionChangedEventArgs)
05-03 16:18:32.809 I/mono-stdout( 7960):   at Cirrious.MvvmCross.Binding.Droid.Views.MvxAdapterWithChangedEvent.NotifyDataSetChanged (System.Collections.Specialized.NotifyCollectionChangedEventArgs e) [0x00000] in <filename unknown>:0
05-03 16:18:32.809 I/mono-stdout( 7960):   at Cirrious.MvvmCross.Binding.Droid.Views.MvxAdapterWithChangedEvent.NotifyDataSetChanged () [0x00000] in <filename unknown>:0
05-03 16:18:32.809 I/mono-stdout( 7960):   at Cirrious.MvvmCross.Binding.Droid.Views.MvxAdapter.SetItemsSource (IEnumerable value) [0x00000] in <filename unknown>:0
05-03 16:18:32.809 I/mono-stdout( 7960):   at Cirrious.MvvmCross.Binding.Droid.Views.MvxAdapter.set_ItemsSource (IEnumerable value) [0x00000] in <filename unknown>:0
05-03 16:18:32.809 I/mono-stdout( 7960):   at Cirrious.MvvmCross.Binding.Droid.Views.MvxGridView.set_ItemsSource (IEnumerable value) [0x00000] in <filename unknown>:0
05-03 16:18:32.809 I/mono-stdout( 7960):   at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
05-03 16:18:32.809 I/mono-stdout( 7960):   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
05-03 16:18:32.809 I/mono-stdout( 7960):   --- End of managed exception stack trace ---
05-03 16:18:32.809 I/mono-stdout( 7960): java.lang.UnsupportedOperationException: removeAllViews() is not supported in AdapterView
05-03 16:18:32.809 I/mono-stdout( 7960):    at android.widget.AdapterView.removeAllViews(AdapterView.java:521)
05-03 16:18:32.809 I/mono-stdout( 7960):    at cirrious.mvvmcross.binding.droid.binders.MvxBindingLayoutInflatorFactory.n_onCreateView(Native Method)
05-03 16:18:32.809 I/mono-stdout( 7960):    at cirrious.mvvmcross.binding.droid.binders.MvxBindingLayoutInflatorFactory.onCreateView(MvxBindingLayoutInflatorFactory.java:29)
05-03 16:18:32.809 I/mono-stdout( 7960):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:669)
05-03 16:18:32.809 I/mono-stdout( 7960):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
05-03 16:18:32.809 I/mono-stdout( 7960):    at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
05-03 16:18:32.809 I/mono-stdout( 7960):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
05-03 16:18:32.809 I/mono-stdout( 7960):    at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
05-03 16:18:32.809 I/mono-stdout( 7960):    at gridviewbug.droid.views.FirstView.n_onCreate(Native Method)
05-03 16:18:32.809 I/mono-stdout( 7960):    at gridviewbug.droid.views.FirstView.onCreate(FirstView.java:28)
05-03 16:18:32.809 I/mono-stdout( 7960):    at android.app.Activity.performCreate(Activity.java:4465)
05-03 16:18:32.809 I/mono-stdout( 7960):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
05-03 16:18:32.809 I/mono-stdout( 7960):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
05-03 16:18:32.809 I/mono-stdout( 7960):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
05-03 16:18:32.809 I/mono-stdout( 7960):    at android.app.ActivityThread.access$600(ActivityThread.java:123)
05-03 16:18:32.809 I/mono-stdout( 7960):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
05-03 16:18:32.809 I/mono-stdout( 7960):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-03 16:18:32.809 I/mono-stdout( 7960):    at android.os.Looper.loop(Looper.java:137)
05-03 16:18:32.809 I/mono-stdout( 7960):    at android.app.ActivityThread.main(ActivityThread.java:4424)
05-03 16:18:32.809 I/mono-stdout( 7960):    at java.lang.reflect.Method.invokeNative(Native Method)
05-03 16:18:32.809 I/mono-stdout( 7960):    at java.lang.reflect.Method.invoke(Method.java:511)
05-03 16:18:32.809 I/mono-stdout( 7960):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-03 16:18:32.809 I/mono-stdout( 7960):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-03 16:18:32.809 I/mono-stdout( 7960):    at dalvik.system.NativeStart.main(Native Method)

我做错了什么?我正在使用可以从Nuget获得的最新资料.在VS2012中的Mono Android 4.6.4上运行

What I'm doing wrong?I'm using the latest stuff I can get from Nuget. Running on Mono Android 4.6.4 in VS2012

以下是带有完整代码的仓库: https://github.com/sschoeb/MvvmCrossGridViewProblem

Here is the repo with the complete code:https://github.com/sschoeb/MvvmCrossGridViewProblem

推荐答案

在跟踪中,它看起来像一个简单的错误,可能是在修复另一个问题时某处发生的回归.

From the tracem it looks like a straight-forward bug, probably a regression that occured somewhere while fixing another issue.

您最好的选择是在GitHub上打开一个问题- https://github. com/slodge/MvvmCross/issues/new ?或者,您可以派生源并将其修复到您的分支中.

Your best bet would be to open an issue for this on GitHub - https://github.com/slodge/MvvmCross/issues/new? Or you could fork the source and fix it in your branch.

在此期间,也许尝试使用MvxListView?还是创建一个新的可绑定ViewGroup?

In the meantime, maybe try using the MvxListView? Or create a new bindable ViewGroup?

这篇关于在MvvmCross中使用MvxGridView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-02 23:03