在MvxListView中绑定ItemTemplate

时间:2018-07-11 10:23:33

标签: c# android listview mvvmcross listviewitem

我正在使用Mvvmcross v.6.1.2开发简单的Android应用程序,但对MvxListView ItemTemplate绑定有麻烦。 这是我的ListView,它已正确绑定到ViewModel中的MvxObservableCollection Weather:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
              android:background="#ffffff">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="2dp"
        android:layout_gravity="center_horizontal"
        local:MvxBind="Text WeatherName"/>
</LinearLayout>

这是我的ListView ItemTemplate:

local:MvxItemTemplate="ItemTemplateId weatherListItem"

response有什么问题?

2 个答案:

答案 0 :(得分:1)

您的版式有几个问题:

<MvxListView
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:divider="#000000"
    android:dividerHeight="3px"
    local:MvxBind="ItemsSource Weather; ItemClick ListItemClickCommand"
    local:MvxItemTemplate="ItemTemplateId weatherListItem"
    SelectedItem="{mvx:MvxBind CurrentWeather}"/>

第一个问题是

local:MvxItemTemplate="ItemTemplateId weatherListItem"

MvxItemTemplateaxml / xml文件中使用时,指的是用作项目模板的布局。这将是您在android资源中的布局。为了将其指向您的一种资源布局,您需要如下编写它:

local:MvxItemTemplate="@layout/nameoflayout"

这将为ListView提供一个ID,该ID在膨胀时与您的布局匹配。

这里的另一个问题是您将Xamarin.Forms XAML属性与Android属性混合在一起。

SelectedItem="{mvx:MvxBind CurrentWeather}"

该行不会膨胀,因为SelectedItem中没有名为MvxListView的属性。如果您希望绑定公共财产,则需要在MvxBind中完成。

local:MvxBind="ItemsSource Weather; ItemClick ListItemClickCommand; SelectedItem CurrentWeather"

答案 1 :(得分:0)

您的ItemTemplate布局是否称为“ weatherListItem”?如果是这样,则需要这样指定ItemTemplate和SelectedItem:

<?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-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    <MvxListView
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:divider="#000000"
        android:dividerHeight="3px"
        local:MvxBind="ItemsSource Weather; SelectedItem CurrentWeather; ItemClick ListItemClickCommand"
        local:MvxItemTemplate="@layout/weatherListItem"/>
</LinearLayout>

此处提供了一些示例代码: https://github.com/MvvmCross/MvvmCross-Samples/tree/master/WorkingWithCollections