У меня есть ListView с привязкой на ObservableCollection<Класс> Buses представляющий из себя коллекцию объектов состоящих из нескольких string var представленных как _NameEnded, _NameMarshrut, _TimeArrival. Каждый из них выводится по столбцам внутри Grid и при добавлении нового элемента в коллекцию, создаётся ещё одна строка выводящая внутри всю информацию, это работает как надо.
<ListView ItemsSource="{Binding Buses}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="30"></ColumnDefinition>
<ColumnDefinition Width="70"></ColumnDefinition>
<ColumnDefinition Width="180"></ColumnDefinition>
<ColumnDefinition Width="80"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Image Grid.Column="0" HeightRequest="20" WidthRequest="20" Background="Blue" Source="bus_icon.png" />
<Label Grid.Column="1" WidthRequest="50" VerticalOptions="Center" HorizontalOptions="Center" Text="{Binding _NameMarshrut}"></Label>
<Label Grid.Column="2" VerticalOptions="Center" Text="{Binding _NameEnded}"></Label>
<Label Grid.Column="3" VerticalOptions="Center" FontSize="20" Text="{Binding _TimeArrival}"></Label>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Но мне необходимо в моей MVVM модели прописать алгоритм, который позволит выводить только те объекты коллекции Buses, которые по своему полю соответствуют определённым условиям (Например _NameMarshrut == "69"), однако я не очень хорошо понимаю, как работать с ViewModel корректно и на данный момент моя коллекция имеет атрибут read-only, что не позволяет мне, например, выводить через get только те элементы коллекции, которые мне нужны
я пробовал реализовать фильтрацию через get, ожидая возвращения отфильтрованной коллекции, но я понимаю что в данном коде он просто обращается к себе же рекурсивно, кроме того я получаю ошибку "CS8050 Инициализаторы могут иметь только автоматически реализованные свойства"
public string SelectBS;
public ObservableCollection<ArrivingBusesModel> Buses
{
get
{
ObservableCollection<ArrivingBusesModel> Filter = new ObservableCollection<ArrivingBusesModel>();
foreach (var modelBus in Buses)
{
foreach (var Stop in modelBus.marshr.Stops)
{
if (Stop.Name == selectBS) Filter.Add(modelBus);
}
}
return Filter;//(ObservableCollection<ArrivingBusesModel>)buses.Where(p => p.marshr.Stops.Where(x => x.Name == SelectBS).Count() > 0);
}
} = new();
ListCollectionView– EvgeniyZ Dec 07 '23 at 17:05