Xamarin Forms的ListView在ItemTemplate中绑定ViewModel变量非集合中的字段
首先定义一个ViewModel
public class Item { public string Name; public string Des; } public class DemoViewModel:ObservableObject { string _displayText; public string DisplayText { get { return _displayText; } set { _displayText = value; OnPropertyChanged("DisplayText"); } } List<Item> _item; public List<Item> Items { get { return _item; } set { _item = value; OnPropertyChanged("Items"); } } public DemoViewModel() { DisplayText = "绑定内容在这里"; Items = new List<Item>(); Items.Add(new Item { Name = "小明", Des = "班长" }); Items.Add(new Item { Name = "小红", Des = "组长" }); Items.Add(new Item { Name = "小亮", Des = "学生" }); }
接着在Page的cs文件中设置绑定
using MyTheme.ViewModels; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Xamarin.Forms; using Xamarin.Forms.Xaml; namespace MyTheme.Views { [XamlCompilation(XamlCompilationOptions.Compile)] public partial class DemoPage : ContentPage { DemoViewModel demoViewModel; public DemoPage () { InitializeComponent (); demoViewModel = new DemoViewModel(); BindingContext = demoViewModel; } } }
在xaml中给Page添加x:Name以及绑定字段
<?xml version="1.0" encoding="utf-8" ?> <ContentPage x:Name="DemoPage" xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="MyTheme.Views.DemoPage" > <ContentPage.Content> <StackLayout> <ListView ItemsSource="{Binding Items}"> <ListView.ItemTemplate> <DataTemplate> <Label Text="{Binding Name}"/> <Label Text="{Binding Path=BindingContext.DisplayText, Source={x:Reference Name=DemoPage}}"/> </DataTemplate> </ListView.ItemTemplate> </ListView> </StackLayout> </ContentPage.Content> </ContentPage>