我认为我需要以编程方式绑定数据以解决我的问题。
我使用TabHost,其中包含2个标签。 当TabHost出现时,我需要在第二个选项卡中加载MvxBindableListView,并将第一个选项卡保留为默认选项卡。
我正在做的是开始第二个标签活动没有问题,因为我使用此代码检查过程:
protected override void OnViewModelSet()
{
SetContentView(Resource.Layout.Page_ActivityView);
System.Diagnostics.Debug.WriteLine("activityView started");
MvxBindableListView mvxBindableListView = FindViewById<MvxBindableListView>(Resource.Id.mvxBindableListView);
mvxBindableListView.ChildViewAdded += new System.EventHandler<Android.Views.ViewGroup.ChildViewAddedEventArgs>(mvxBindableListView_ChildViewAdded);
}
“activityView started”显示在输出调试器中,但仅当我单击第二个选项卡时才会引发MvxBindableListView.ChildViewAdded事件。
所以我认为MvxBindableListView不是数据绑定。
提前感谢您帮助我以编程方式加载我的第二个标签。
答案 0 :(得分:1)
我认为ChildViewAdded
是一个在呈现ListView时发生的事件 - 当它需要“绘制列表项”时,它会向其适配器询问屏幕的子视图。当你向下滚动列表时,它会询问更多的子视图 - 但它也会重用视图 - 所以对于一个简单的列表,你应该(希望)在ChildViewAdded上获得N + 1个调用,以获得显示N个项目的列表一次。
因此,列表完全可能是数据绑定但永远不会调用ChildViewAdded
- 在列表被“绘制”之前不会被调用
可悲的是,Xamarin文档在这里没有帮助 - http://docs.mono-android.net/monodoc.ashx?link=E%3AAndroid.Views.ViewGroup.ChildViewAdded
注意:如果您确实希望以编程方式进行绑定,那么您可以使用Bind()
方法和扩展方法执行此操作。但是,我在这里没有扩展 - 因为它听起来并不像你需要的那样!