我正面临着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}
有没有人有任何想法?我非常怀疑最后一次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上绑定,仍然存在