Xamarin MVVM 通过 ViewModel 进行数据绑定,同时具有 class 和其中的对象列表
Xamarin MVVM Data Binding through ViewModel while having class with an object list inside it
我的问题是我有一个 class 位置,class LocationsDb,在 LocationsDb 中我有一个 public 列表,其中包含硬编码数据。现在我在尝试绑定 LocationsDb class 中的 List 中的数据时遇到了我的 ViewModel class 的问题。我希望我的列表视图只显示城市。我的代码哪里做错了?
地点class
public class Location
{
public string city { get; set; }
public string street { get; set; }
public int emptySpaces { get; set; }
public Location(string city, string street, int emptySpaces)
{
this.city = city;
this.street = street;
this.emptySpaces = emptySpaces;
}
}
LocationsDb class
public class LocationsDb
{
public List<Location> Locations = new List<Location>
{
new Location("Vilnius", "Ateities g. 91", 5),
new Location("Vilnius", "S. Nėries g. 91", 10),
new Location("Vilnius", "Lukiškių g. 6", 1),
new Location("Vilnius", "Dominikonų g. 4", 0),
new Location("Kaunas", "Jonavos g. 1", 8),
new Location("Kaunas", "Vytauto pr. 24", 3),
new Location("Kaunas", "Žemaičių g. 31B", 0),
new Location("Kaunas", "Ateities g. 91", 5),
new Location("Klaipėda", "Smiltelės g. 2A", 13),
new Location("Klaipėda", "Žvejų g. 27", 7),
new Location("Klaipėda", "Minijos g. 90", 0),
new Location("Klaipėda", "Bangų g. 5", 0),
};
public List<Location> GetLocations()
{
return this.Locations;
}
}
视图模型class
public class MainPageViewModel
{
public ObservableCollection<Location> AllCities { get; set; }
public ObservableCollection<Location> allCities { get { return AllCities; } }
public MainPageViewModel()
{
AllCities = new ObservableCollection<Location>(new LocationsDb().Locations);
}
}
Xaml
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="ParkingApp.Views.MainPage"
ControlTemplate="{StaticResource MyTemplate}"
>
<ContentPage.Content>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Label Grid.Row="0" Text="Select City"
BackgroundColor="#e8e8e8" HorizontalTextAlignment="Center"
HeightRequest="50" VerticalTextAlignment="Center"
FontSize="30"/>
<ListView x:Name="CitiesListview" Grid.Row="1" ItemsSource="{Binding AllCities}" SeparatorColor="Black">
<ListView.ItemTemplate>
<DataTemplate>
<TextCell TextColor="Black" Text="{Binding city}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</ContentPage.Content>
我使用您的代码将 observablecollection 绑定到 ListView,没问题。我不更改 ContentPage.xaml
的任何代码
请检查我的ContentPage.cs:
public partial class Page8 : ContentPage
{
public Page8()
{
InitializeComponent();
this.BindingContext = new MainPageViewModel();
}
}
public class MainPageViewModel
{
public ObservableCollection<Location> AllCities { get; set; }
public MainPageViewModel()
{
AllCities = new ObservableCollection<Location>(new LocationsDb().Locations);
}
}
关于ListView绑定,请看:
https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/listview/data-and-databinding
我不知道出了什么问题,但下次我启动我的应用程序时,它运行得非常好。我的代码没有变化。所以我不知道,也许是某种绑定延迟或错误,但代码没问题,我的列表视图显示了我想要的内容。
我的问题是我有一个 class 位置,class LocationsDb,在 LocationsDb 中我有一个 public 列表,其中包含硬编码数据。现在我在尝试绑定 LocationsDb class 中的 List 中的数据时遇到了我的 ViewModel class 的问题。我希望我的列表视图只显示城市。我的代码哪里做错了?
地点class
public class Location
{
public string city { get; set; }
public string street { get; set; }
public int emptySpaces { get; set; }
public Location(string city, string street, int emptySpaces)
{
this.city = city;
this.street = street;
this.emptySpaces = emptySpaces;
}
}
LocationsDb class
public class LocationsDb
{
public List<Location> Locations = new List<Location>
{
new Location("Vilnius", "Ateities g. 91", 5),
new Location("Vilnius", "S. Nėries g. 91", 10),
new Location("Vilnius", "Lukiškių g. 6", 1),
new Location("Vilnius", "Dominikonų g. 4", 0),
new Location("Kaunas", "Jonavos g. 1", 8),
new Location("Kaunas", "Vytauto pr. 24", 3),
new Location("Kaunas", "Žemaičių g. 31B", 0),
new Location("Kaunas", "Ateities g. 91", 5),
new Location("Klaipėda", "Smiltelės g. 2A", 13),
new Location("Klaipėda", "Žvejų g. 27", 7),
new Location("Klaipėda", "Minijos g. 90", 0),
new Location("Klaipėda", "Bangų g. 5", 0),
};
public List<Location> GetLocations()
{
return this.Locations;
}
}
视图模型class
public class MainPageViewModel
{
public ObservableCollection<Location> AllCities { get; set; }
public ObservableCollection<Location> allCities { get { return AllCities; } }
public MainPageViewModel()
{
AllCities = new ObservableCollection<Location>(new LocationsDb().Locations);
}
}
Xaml
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="ParkingApp.Views.MainPage"
ControlTemplate="{StaticResource MyTemplate}"
>
<ContentPage.Content>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Label Grid.Row="0" Text="Select City"
BackgroundColor="#e8e8e8" HorizontalTextAlignment="Center"
HeightRequest="50" VerticalTextAlignment="Center"
FontSize="30"/>
<ListView x:Name="CitiesListview" Grid.Row="1" ItemsSource="{Binding AllCities}" SeparatorColor="Black">
<ListView.ItemTemplate>
<DataTemplate>
<TextCell TextColor="Black" Text="{Binding city}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</ContentPage.Content>
我使用您的代码将 observablecollection 绑定到 ListView,没问题。我不更改 ContentPage.xaml
的任何代码请检查我的ContentPage.cs:
public partial class Page8 : ContentPage
{
public Page8()
{
InitializeComponent();
this.BindingContext = new MainPageViewModel();
}
}
public class MainPageViewModel
{
public ObservableCollection<Location> AllCities { get; set; }
public MainPageViewModel()
{
AllCities = new ObservableCollection<Location>(new LocationsDb().Locations);
}
}
关于ListView绑定,请看:
https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/listview/data-and-databinding
我不知道出了什么问题,但下次我启动我的应用程序时,它运行得非常好。我的代码没有变化。所以我不知道,也许是某种绑定延迟或错误,但代码没问题,我的列表视图显示了我想要的内容。