1

我想我需要以编程方式绑定数据来解决我的问题。

我使用托管 2 个选项卡的 TabHost。当 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 不是数据绑定的。

提前感谢帮助我以编程方式加载我的第二个选项卡。

4

1 回答 1

1

我认为ChildViewAdded这是在呈现 ListView 时发生的事件 - 那时它需要“绘制列表项”,然后它会向其适配器询问屏幕的子视图。当您向下滚动列表时,它会要求更多的子视图 - 但它也会重用视图 - 所以对于一个简单的列表,您应该只(希望)在 ChildViewAdded 上获得 N+1 次调用,以获得显示 N 个项目的列表一度。


因此,列表完全有可能被数据绑定但从不调用ChildViewAdded- 在列表被“绘制”之前不会被调用


可悲的是 Xamarin 文档在这里没有帮助 - http://docs.mono-android.net/monodoc.ashx?link=E%3AAndroid.Views.ViewGroup.ChildViewAdded


注意:如果您确实想以编程方式绑定,那么您可以这样做 - 使用Bind()方法和扩展方法。但是,我在这里没有对此进行扩展-因为听起来这实际上并不是您所需要的!

于 2012-10-25T17:32:44.630 回答