我还在学习,所以请忍受我。
我正在尝试在ListView
中显示一个Xamarin.Form
。到目前为止,这就是我所拥有的,并且效果很好:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:maps="clr-namespace:Xamarin.Forms.Maps;assembly=Xamarin.Forms.Maps"
xmlns:local="clr-namespace:GasStations"
x:Class="GasStations.MainPage">
<StackLayout>
<ListView x:Name="ListView_Pets">
</ListView>
</StackLayout>
</ContentPage>
这是背后的代码:
var obj = JsonConvert.DeserializeObject(coord);
List<String> storeList = new List<String>();
string store = string.Empty;
foreach (var item in ((JArray)obj))
{
store = item.Value<string>("name");
//desc = item.Value<string>("description"); /* This is the string I want to display */
storeList.Add(store);
}
ListView_Pets.ItemsSource = storeList;
它有效,并且在ListView
中显示商店名称。您可以看到screenshot here。
现在,我不仅要显示Name
中的商店ListView
,还要显示说明(以及其他任何值)。我假设每行都需要Labels
,类似于asp.net
GridView
ItemTemplate
。
我尝试了类似的方法,但是没有建立:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:maps="clr-namespace:Xamarin.Forms.Maps;assembly=Xamarin.Forms.Maps"
xmlns:local="clr-namespace:GasStations"
x:Class="GasStations.MainPage">
<StackLayout>
<ListView x:Name="ListView_Pets" ItemsSource="{Binding MyClass}" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<Label x:Name="Label_Name" Text="Name" />
<Label x:Name="Label_Desc" Text="Description" />
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage>
我可以使用后面的代码访问Name
和Description
(使用desc = item.Value<string>("description");
,但是我不知道如何将这些值绑定到表单中的标签。
答案 0 :(得分:3)
您需要指定 Binding 。。有趣的类中的属性是Name
和Description
,那么您可以这样做
<Label x:Name="Label_Name" Text="{Binding Name}" />
<Label x:Name="Label_Desc" Text="{Binding Description}" />
注意 :除非您需要直接从Code-Behind
访问它们,否则无需使用x:Name。 ><Label Text="{Binding Name}" />
<Label Text="{Binding Description}" />
已更新
感谢您的回答。但是我需要在后面的代码中做什么? 我将它们绑定到什么对象上?
在ItemTemplate
中指定绑定时,您将绑定到listview
已指定为ItemsSource
的列表中类的各个属性
答案 1 :(得分:1)
使用属性定义类
public MyClass(){
public string Name{get;set;}
public string Description{get;set;}
}
之后然后在后面的代码中
var obj = JsonConvert.DeserializeObject<List<MyClass>>(coord);
ListView_Pets.ItemsSource = obj;
然后在列表视图中更新
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:maps="clr-namespace:Xamarin.Forms.Maps;assembly=Xamarin.Forms.Maps"
xmlns:local="clr-namespace:GasStations"
x:Class="GasStations.MainPage">
<StackLayout>
<ListView x:Name="ListView_Pets" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell>
<StackLayout Orientation="Vertical">
<Label Text="{Binding Name" />
<Label Text="{Binding Description}" />
</StackLayout>
</ViewCell>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage>
答案 2 :(得分:1)
在Ankit tyagi的代码中,他们在他的xaml中写了两个viewcell
。删除其中之一。
完全有将数据绑定到列表视图的创建过程。
首先定义您的模型。
public class MyClass
{
public string Name { get; set; }
public string Description { get; set; }
}
然后,在后面的代码中定义一个数据源。建议您使用ObservableCollection收集数据。 ObservableCollection是一个通用的动态数据集合,可在添加,删除项目或刷新整个集合时提供通知(使用接口“ INotifyCollectionChanged”)
public ObservableCollection<MyClass> DataSource { get; set; }
public MainPage()
{
this.BindingContext = this;
DataSource = new ObservableCollection<MyClass>();
DataSource.Add(new MyClass() { Name = "Item 1", Description = "Sub Item Text 1" });
DataSource.Add(new MyClass() { Name = "Item 2", Description = "Sub Item Text 2" });
DataSource.Add(new MyClass() { Name = "Item 3", Description = "Sub Item Text 3" });
InitializeComponent();
}
最后,在您的xaml中定义一个列表视图。不要忘记绑定后面的代码中的源数据。
<StackLayout>
<ListView x:Name="ListView_Pets"
ItemsSource="{Binding DataSource}"
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand"
SeparatorColor="Silver">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Vertical" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" >
<Label Text="{Binding Name}" />
<Label Text="{Binding Description}" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
运行这些代码。