在列表视图 xamarin 表单中显示多个项目
Show multiple items in listview xamarin forms
我是 C# 和 XAML 的新手,我正在开发一款允许您列出所有正在创建的旅行的旅行应用程序。
我在使用 ListView 显示所有行程时遇到问题。
我的 problem:It 只显示了一次行程,而不是所有已注册的行程
我是 C# 和 XAML 的新手,我正在开发一款允许您列出所有正在创建的旅行的旅行应用程序。
我在使用 ListView 显示所有行程时遇到问题。
我的问题:它只显示了一次行程,而不是所有已注册的行程
ViewModel
public VerViajeViewModel()
{
string response = "";
try
{
Task.Run(async () => {
response= await apiRest.ConsultaViaje();
}).Wait();
List<Viaje> consulta = JsonConvert.DeserializeObject<List<Viaje>>(response);
SfCardView cardView;
foreach (Viaje consultas in consulta)
{
Items = new Viaje[]
{
new Viaje(){Destino = consultas.Destino, Url= consultas.Url, FechaSalida= consultas.FechaSalida, FechaVuelta= consultas.FechaVuelta, Disponibilidad= consultas.Disponibilidad},
};
}
}
catch(Exception ex)
{
Console.WriteLine(ex);
}
}
}
Xaml
<ContentPage.BindingContext>
<ViewModels:VerViajeViewModel></ViewModels:VerViajeViewModel>
</ContentPage.BindingContext>
<StackLayout VerticalOptions="FillAndExpand" >
<Label Text="Mis Viajes" FontSize="Title" HorizontalOptions="CenterAndExpand"></Label>
<ListView x:Name="EventListView"
Margin="0,8,0,0"
HasUnevenRows="True"
SeparatorVisibility="None"
ItemsSource="{Binding Items}">
<ListView.ItemTemplate>
<DataTemplate >
<ViewCell>
<cards:SfCardView BackgroundColor="#17669f" VerticalOptions="FillAndExpand" >
<cards:SfCardView.GestureRecognizers>
<TapGestureRecognizer
Tapped="VerViaje"/>
</cards:SfCardView.GestureRecognizers>
<Grid VerticalOptions="FillAndExpand" >
<StackLayout Orientation="Horizontal" >
<Label
FontAttributes="Italic"
FontSize="27"
MaxLines="1"
HorizontalOptions="CenterAndExpand"
Text="Viajes Divertidos"
TextColor="#e0eeeb"
/>
<Image
Source="{Binding Url}"
HeightRequest="90" WidthRequest="90"
/>
</StackLayout>
<StackLayout HorizontalOptions="Start" Padding="25,40,100,20">
<Label
FontAttributes="Italic"
FontSize="24"
HorizontalOptions="CenterAndExpand"
Text="Viaja a:"
TextColor="#e0eeeb"
/>
</StackLayout>
<StackLayout HorizontalOptions="CenterAndExpand" Padding="25,60,100,20">
<Label
FontAttributes="Italic"
FontSize="30"
HorizontalOptions="Center"
Text="{Binding Destino}"
TextColor="#50d6a3"
/>
</StackLayout>
<StackLayout HorizontalOptions="StartAndExpand" Padding="25,110,100,20">
<Label
FontAttributes="Italic"
FontSize="15"
HorizontalOptions="Start"
Text="Fecha Salida:"
TextColor="#e0eeeb"
/>
</StackLayout>
<StackLayout HorizontalOptions="CenterAndExpand" Padding="85,110,100,20">
<Label
FontAttributes="Italic"
FontSize="15"
HorizontalOptions="Center"
Text="{Binding FechaSalida}"
TextColor="#e0eeeb"
/>
</StackLayout>
<StackLayout HorizontalOptions="StartAndExpand" Padding="25,130,100,20">
<Label
FontAttributes="Italic"
FontSize="15"
HorizontalOptions="Start"
Text="Fecha Regreso:"
TextColor="#e0eeeb"
/>
</StackLayout>
<StackLayout HorizontalOptions="CenterAndExpand" Padding="110,130,100,20">
<Label
FontAttributes="Italic"
FontSize="15"
HorizontalOptions="Center"
Text="{Binding FechaVuelta}"
TextColor="#e0eeeb"
/>
</StackLayout>
<StackLayout HorizontalOptions="StartAndExpand" Padding="25,150,100,20">
<Label
FontAttributes="Italic"
FontSize="15"
HorizontalOptions="Start"
Text="Disponibilidad:"
TextColor="#57e7a6"
/>
</StackLayout>
<StackLayout HorizontalOptions="CenterAndExpand" Padding="40,150,100,20">
<Label
FontAttributes="Italic"
FontSize="15"
HorizontalOptions="Start"
Text="{Binding Disponibilidad}"
TextColor="#57e7a6"
/>
</StackLayout>
</Grid>
</cards:SfCardView>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
Result
您似乎正在使用 Viaje
个数组。
相反,您应该使用 ObservableCollection
。 ObservableCollection
将允许 ListView
组件在添加更多项目时自动更新 UI。
此外,您似乎在此处的每次循环中都覆盖了绑定数组 Items
:
foreach (Viaje consultas in consulta)
{
Items = new Viaje[]
{
new Viaje(){Destino = consultas.Destino, Url= consultas.Url, FechaSalida= consultas.FechaSalida, FechaVuelta= consultas.FechaVuelta, Disponibilidad= consultas.Disponibilidad},
};
}
考虑将 Items
声明移到 for 循环之外:
Items = new ObservableCollection<Viaje>();
foreach (Viaje consultas in consulta)
{
Items.Add(consultas);
}
我是 C# 和 XAML 的新手,我正在开发一款允许您列出所有正在创建的旅行的旅行应用程序。
我在使用 ListView 显示所有行程时遇到问题。
我的 problem:It 只显示了一次行程,而不是所有已注册的行程 我是 C# 和 XAML 的新手,我正在开发一款允许您列出所有正在创建的旅行的旅行应用程序。
我在使用 ListView 显示所有行程时遇到问题。
我的问题:它只显示了一次行程,而不是所有已注册的行程
ViewModel
public VerViajeViewModel()
{
string response = "";
try
{
Task.Run(async () => {
response= await apiRest.ConsultaViaje();
}).Wait();
List<Viaje> consulta = JsonConvert.DeserializeObject<List<Viaje>>(response);
SfCardView cardView;
foreach (Viaje consultas in consulta)
{
Items = new Viaje[]
{
new Viaje(){Destino = consultas.Destino, Url= consultas.Url, FechaSalida= consultas.FechaSalida, FechaVuelta= consultas.FechaVuelta, Disponibilidad= consultas.Disponibilidad},
};
}
}
catch(Exception ex)
{
Console.WriteLine(ex);
}
}
}
Xaml
<ContentPage.BindingContext>
<ViewModels:VerViajeViewModel></ViewModels:VerViajeViewModel>
</ContentPage.BindingContext>
<StackLayout VerticalOptions="FillAndExpand" >
<Label Text="Mis Viajes" FontSize="Title" HorizontalOptions="CenterAndExpand"></Label>
<ListView x:Name="EventListView"
Margin="0,8,0,0"
HasUnevenRows="True"
SeparatorVisibility="None"
ItemsSource="{Binding Items}">
<ListView.ItemTemplate>
<DataTemplate >
<ViewCell>
<cards:SfCardView BackgroundColor="#17669f" VerticalOptions="FillAndExpand" >
<cards:SfCardView.GestureRecognizers>
<TapGestureRecognizer
Tapped="VerViaje"/>
</cards:SfCardView.GestureRecognizers>
<Grid VerticalOptions="FillAndExpand" >
<StackLayout Orientation="Horizontal" >
<Label
FontAttributes="Italic"
FontSize="27"
MaxLines="1"
HorizontalOptions="CenterAndExpand"
Text="Viajes Divertidos"
TextColor="#e0eeeb"
/>
<Image
Source="{Binding Url}"
HeightRequest="90" WidthRequest="90"
/>
</StackLayout>
<StackLayout HorizontalOptions="Start" Padding="25,40,100,20">
<Label
FontAttributes="Italic"
FontSize="24"
HorizontalOptions="CenterAndExpand"
Text="Viaja a:"
TextColor="#e0eeeb"
/>
</StackLayout>
<StackLayout HorizontalOptions="CenterAndExpand" Padding="25,60,100,20">
<Label
FontAttributes="Italic"
FontSize="30"
HorizontalOptions="Center"
Text="{Binding Destino}"
TextColor="#50d6a3"
/>
</StackLayout>
<StackLayout HorizontalOptions="StartAndExpand" Padding="25,110,100,20">
<Label
FontAttributes="Italic"
FontSize="15"
HorizontalOptions="Start"
Text="Fecha Salida:"
TextColor="#e0eeeb"
/>
</StackLayout>
<StackLayout HorizontalOptions="CenterAndExpand" Padding="85,110,100,20">
<Label
FontAttributes="Italic"
FontSize="15"
HorizontalOptions="Center"
Text="{Binding FechaSalida}"
TextColor="#e0eeeb"
/>
</StackLayout>
<StackLayout HorizontalOptions="StartAndExpand" Padding="25,130,100,20">
<Label
FontAttributes="Italic"
FontSize="15"
HorizontalOptions="Start"
Text="Fecha Regreso:"
TextColor="#e0eeeb"
/>
</StackLayout>
<StackLayout HorizontalOptions="CenterAndExpand" Padding="110,130,100,20">
<Label
FontAttributes="Italic"
FontSize="15"
HorizontalOptions="Center"
Text="{Binding FechaVuelta}"
TextColor="#e0eeeb"
/>
</StackLayout>
<StackLayout HorizontalOptions="StartAndExpand" Padding="25,150,100,20">
<Label
FontAttributes="Italic"
FontSize="15"
HorizontalOptions="Start"
Text="Disponibilidad:"
TextColor="#57e7a6"
/>
</StackLayout>
<StackLayout HorizontalOptions="CenterAndExpand" Padding="40,150,100,20">
<Label
FontAttributes="Italic"
FontSize="15"
HorizontalOptions="Start"
Text="{Binding Disponibilidad}"
TextColor="#57e7a6"
/>
</StackLayout>
</Grid>
</cards:SfCardView>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
Result
您似乎正在使用 Viaje
个数组。
相反,您应该使用 ObservableCollection
。 ObservableCollection
将允许 ListView
组件在添加更多项目时自动更新 UI。
此外,您似乎在此处的每次循环中都覆盖了绑定数组 Items
:
foreach (Viaje consultas in consulta)
{
Items = new Viaje[]
{
new Viaje(){Destino = consultas.Destino, Url= consultas.Url, FechaSalida= consultas.FechaSalida, FechaVuelta= consultas.FechaVuelta, Disponibilidad= consultas.Disponibilidad},
};
}
考虑将 Items
声明移到 for 循环之外:
Items = new ObservableCollection<Viaje>();
foreach (Viaje consultas in consulta)
{
Items.Add(consultas);
}