如何在ListView中绑定Xamarin.forms.Maps的位置值?
How to bind the position value of Xamarin.forms.Maps inside the ListView?
我正在使用 Xamarin.forms.Maps
在我的项目中显示地图。地图在ListView
里面,我需要把坐标位置绑定到地图上。
型号Class:
public class History
{
public double Latitude { get; set; }
public double Longitude { get; set; }
}
数据添加部分:
historyList.Add(new History() { Latitude= -28.854930 ,Longitude= 151.166023 });
historyList.Add(new History() { Latitude = -28.853671, Longitude = 151.165712 });
historyList.Add(new History() { Latitude = -28.853934, Longitude = 151.167118 });
historyList.Add(new History() { Latitude = -28.855178, Longitude = 151.167946 });
historylistview.ItemsSource = historyList;
XAML
<ListView x:Name="historylistview">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<StackLayout
HorizontalOptions="Center">
<maps:Map
x:Name="maps"
VerticalOptions="Center"
HorizontalOptions="Center">
<x:Arguments>
<maps:MapSpan>
<x:Arguments>
<maps:Position>
<x:Arguments>
<x:Double>{Binding Latitude}</x:Double>
<x:Double>{Binding Longitude}</x:Double>
</x:Arguments>
</maps:Position>
<x:Double>0.01</x:Double>
<x:Double>0.01</x:Double>
</x:Arguments>
</maps:MapSpan>
</x:Arguments>
</maps:Map>
</StackLayout>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
每一行都显示地图,但位置值不正确。我已经给出了得克萨斯州的位置,但地图显示在 Nijerya 的某个地方。
是否可以对 x:Arguments
类型进行绑定?
Map 中的 MapSpan 和 Position 是 not 可绑定的 属性 ,所以如果您使用数据绑定,它将永远无法工作。
如果要显示职位列表
<ListView x:Name="historylistview">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<StackLayout
HorizontalOptions="Center">
<maps:Map x:Name="map"
ItemsSource="{Binding positionList}">
<maps:Map.ItemTemplate>
<DataTemplate>
<maps:Pin Position="{Binding .}"/>
</DataTemplate>
</maps:Map.ItemTemplate>
</maps:Map>
</StackLayout>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
historyList.Add(new History() { positionList = new ObservableCollection<Position>() { new Position(36.9628066, -122.0194722) },xxx="title here" });
historyList.Add(new History() { positionList = new ObservableCollection<Position>() { new Position(36.9628066, -122.0194722) }, xxx = "title here" });
//...
historylistview.ItemsSource = historyList;
public class History
{
public ObservableCollection<Position> positionList { get; set; }
//other property
public string xxx { get; set; }
}
查看docs了解更多详情
我正在使用 Xamarin.forms.Maps
在我的项目中显示地图。地图在ListView
里面,我需要把坐标位置绑定到地图上。
型号Class:
public class History
{
public double Latitude { get; set; }
public double Longitude { get; set; }
}
数据添加部分:
historyList.Add(new History() { Latitude= -28.854930 ,Longitude= 151.166023 });
historyList.Add(new History() { Latitude = -28.853671, Longitude = 151.165712 });
historyList.Add(new History() { Latitude = -28.853934, Longitude = 151.167118 });
historyList.Add(new History() { Latitude = -28.855178, Longitude = 151.167946 });
historylistview.ItemsSource = historyList;
XAML
<ListView x:Name="historylistview">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<StackLayout
HorizontalOptions="Center">
<maps:Map
x:Name="maps"
VerticalOptions="Center"
HorizontalOptions="Center">
<x:Arguments>
<maps:MapSpan>
<x:Arguments>
<maps:Position>
<x:Arguments>
<x:Double>{Binding Latitude}</x:Double>
<x:Double>{Binding Longitude}</x:Double>
</x:Arguments>
</maps:Position>
<x:Double>0.01</x:Double>
<x:Double>0.01</x:Double>
</x:Arguments>
</maps:MapSpan>
</x:Arguments>
</maps:Map>
</StackLayout>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
每一行都显示地图,但位置值不正确。我已经给出了得克萨斯州的位置,但地图显示在 Nijerya 的某个地方。
是否可以对 x:Arguments
类型进行绑定?
MapSpan 和 Position 是 not 可绑定的 属性 ,所以如果您使用数据绑定,它将永远无法工作。
如果要显示职位列表
<ListView x:Name="historylistview">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<StackLayout
HorizontalOptions="Center">
<maps:Map x:Name="map"
ItemsSource="{Binding positionList}">
<maps:Map.ItemTemplate>
<DataTemplate>
<maps:Pin Position="{Binding .}"/>
</DataTemplate>
</maps:Map.ItemTemplate>
</maps:Map>
</StackLayout>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
historyList.Add(new History() { positionList = new ObservableCollection<Position>() { new Position(36.9628066, -122.0194722) },xxx="title here" });
historyList.Add(new History() { positionList = new ObservableCollection<Position>() { new Position(36.9628066, -122.0194722) }, xxx = "title here" });
//...
historylistview.ItemsSource = historyList;
public class History
{
public ObservableCollection<Position> positionList { get; set; }
//other property
public string xxx { get; set; }
}
查看docs了解更多详情