MvvmCross - Xamarin - 无法再创建任何MvxListView

时间:2016-07-12 14:43:37

标签: c# android xamarin mvvmcross mvxbind

我正面临着mvvmcross和xamarin的一种非常奇怪的行为。从今天起,我再也无法填充任何MvxListView,MvxLinearLayout等。

以下是我所知道的:

  • 我之前创建的那些类型的所有视图(最后一个工作是在上周创建的)仍然可以正常工作并填充

  • 如果我尝试创建一个新项目,它将不会显示任何子项目。

  • 如果我将背景颜色或任何时尚元素设置到我的视图中,我将能够看到它。但是,如果我为项目模板做同样的事情 不会出现。

  • 如果我点击我的MvxListView,输出会说明:

  

07-12 16:29:09.154 W / AbsListView(26069):意图进行操作   不存在的数据,childcount = 0,mFirstPosition = 0,mItemCount = 0,适配器   计数= 0,   mAdapter=md5bf0126c95bf9fc0db24c02c9adb4cfa7.MvxAdapter@3fbd5398,   action = 1,mActivePointerId = 0,mScrollY = 0,   此= mvvmcross.binding.droid.views.MvxListView {12a517f1   V.ED.VC ......... 15,15-196,912}

  • 如果我在旧的附近添加一个新的MvxListView,将它绑定到同一个数据集,我仍会遇到同样的问题。

有没有人有任何想法?我非常怀疑最后一次Xamarin更新引起了这种情况,因此我升级了Mvmmcross相信他们修复了它,因为最后一次更新是一天(2016年11月7日),但这没有帮助。

更新

经过更多调查后,我可以说我无法创建新的自定义绑定。看起来绑定引擎对我的项目来说绝对是死的。在星期一07/11/2016之前完成的所有绑定都在工作,任何新的绑定都不会,我还没有找到任何解决方法

更新2:

这里要求的是一些代码,但我想说即使我在字符串列表或任何类型的数据集上使用带有itemSource绑定的普通MvxListView,也会发生同样的错误。

我刚刚创建了这个自定义视图,将其用作解决方法,相信重新设置我自己的自定义绑定可以某种方式“覆盖”破坏的绑定系统。

WokingMvxListView

public class WorkingMvxListView : MvxListView
    {
        private ObservableCollection<TimingControlModel> _timings;
        //TimingControlModel is some class containing timespan and floats etc
        public ObservableCollection<TimingControlModel> Timings
        {
            get
            {
                return _timings;
            }
            set
            {
                _timings = value;
                ItemSource = value;
            }
        }
        public WorkingMvxListView(Context context, IAttributeSet attrs) : base(context, attrs)
        {

        }
        public WorkingMvxListView(Context context, IAttributeSet attrs, IMvxAdapter adapter) : base (context, attrs, adapter)
        {

        }
        protected WorkingMvxListView(IntPtr javaReference, JniHandleOwnership transfer): base(javaReference, transfer)
        {

        }
    }

TargetBinding

public class MvxVogofCustomListViewTimersBinding : MvxAndroidTargetBinding
    {
        private readonly bool _isVogofWorkingMvxListViewBinding;

        public MvxVogofCustomListViewTimersBinding(WorkingMvxListView target) : base(target)
        {
            if(target==null)
            {
                MvxBindingTrace.Trace(MvxTraceLevel.Error, "Error WorkingMvxListView is null in MvxVogofMediaControllerFileNameBinding");
                return;
            }
            _isVogofWorkingMvxListViewBinding = target is WorkingMvxListView;
        }

        public override Type TargetType
        {
            get
            {
                return typeof(ObservableCollection<TimingControlModel>);
            }
        }
        public override void SetValue(object value)
        {
            base.SetValue(value);
        }
        protected override void SetValueImpl(object target, object value)
        {
            ((WorkingMvxListView)target).Timings = (ObservableCollection<TimingControlModel>)value;
        }

        public override MvxBindingMode DefaultMode
        {
            get { return  MvxBindingMode.OneWay; }
        }

    }

Setup.cs

protected override void FillTargetFactories(IMvxTargetBindingFactoryRegistry registry)
        {
            registry.RegisterFactory(new MvxCustomBindingFactory<WorkingMvxListView>("Timings", (workingMvxListView) => new MvxVogofCustomListViewTimersBinding(workingMvxListView)));
        }

ViewModel:

 private ObservableCollection<TimingControlModel> _timings;
        public ObservableCollection<TimingControlModel> Timings
        {
            get
            {
                return _timings;
            }
            set
            {
                _timings = value;
                RaisePropertyChanged(() => Timings);
            }
        }

View.axml:

<Vogof.Droid.Views.CustomViews.WorkingMvxListView
 android:id="@+id/TimersList"
 android:orientation="vertical"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:background="@color/White"
 android:layout_margin="10dp"
 android:divider="#DDDDDD"
 android:dividerHeight="4px"
 local:MvxItemTemplate="@layout/template_timer_item"
 local:MvxBind="Timings Timings" />
<!--Yes i know Timings Timings sounds terrible, but it is for test purposes-->

ItemTemplate.axml:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="#050506"
    android:background="@color/Black"
    android:paddingLeft="5dp"
    android:layout_marginBottom="1dp"
    android:layout_marginTop="1dp"
    local:MvxBind="Text TimeToDisplay"
    android:textAppearance="?android:attr/textAppearanceLarge" />

更新3:

通过在我的WorkingMvxListView中添加ItemSource = value,在将Xamarin降级到4.0.3之后,删除我所有的android sdk,安装了angelocarlotto推荐的here,我终于可以在WorkingMvxListViewModel中获取数据了!

但真正的问题是,我无法在正常的MvxListView上绑定,仍然存在

0 个答案:

没有答案
相关问题