MvvmCross:以编程方式进行数据绑定

时间:2012-10-25 17:20:53

标签: windows-phone-7 xamarin.ios xamarin.android xamarin mvvmcross

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

我使用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不是数据绑定。

提前感谢您帮助我以编程方式加载我的第二个标签。

1 个答案:

答案 0 :(得分:1)

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


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


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


注意:如果您确实希望以编程方式进行绑定,那么您可以使用Bind()方法和扩展方法执行此操作。但是,我在这里没有扩展 - 因为它听起来并不像你需要的那样!

相关问题