在MvvmCross中填充MvxListView

时间:2013-12-27 04:25:53

标签: mvvmcross

我使用Visual Studio 2013创建MvvmCross PCL,目标框架是

  • WP8及更高版本
  • .Net Framwork 4.5及更高版本
  • Silverlight 5
  • Xamarin Android
  • Xamarin iOS

在我的一个MvxViewModel中,我有一个List的公共属性,来自某些服务的数据得到了存储。在android中,我用这个填充了一个MvxListView 列表。

现在点击其中一个listitem我想调用新的viewModel,它也会填充另一个List.And对应的MvxListView将有一个ItemTemplate,如下所示

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
           xmlns:local="http://schemas.android.com/apk/res/KittensView.Droid"
           android:orientation="horizontal"
           android:layout_width="fill_parent"
           android:layout_height="fill_parent">
     <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="40dp"
        local:MvxBind="Text Name" />
     <RatingBar
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        local:MvxBind="Text Rating" />
     <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Next" />
</LinearLayout>

在这个axml布局中,我想一次显示一个listItem,点击上面的按钮,下一个listItem应该替换现有的listItem,直到相应List中的所有数据都显示在UI上。

我怎样才能做到这一点?请帮助我...... 提前感谢任何有用的建议。

1 个答案:

答案 0 :(得分:0)

您可以为以下内容创建属性:对象列表(DataItem),对象实例和索引

private int _index = 0;
private List<DataItem> _dataitems;
private DataItem _dataItem;
public DataItem DataItem { 
    get { return _dataItem; } 
    set 
    { 
        DataItem = value; 
        RaiseOnProperty(()=>DataItem); 
    }

public IMvxCommand ShowNextItemCommand
{
    get 
    { 
        return new MvxCommand(()=> {
            _index++;
            DataItem = _dataitems.ElementAt[_index]
        });
    }
}

在您的AXML中,您可以执行以下操作:

<?xml ... />
<LinearLayout ...
 <TextView ...
    local:MvxBind="Text Name1" />
 <TextView ...
    local:MvxBind="Text Name2" />
 <Button ...
    android:text="Next"
    local:MvxBind="Click ShowNextItemCommand" />
</LinearLayout>

我认为它有效。