0

У меня есть 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&lt;ArrivingBusesModel&gt;)buses.Where(p =&gt; p.marshr.Stops.Where(x =&gt; x.Name == SelectBS).Count() &gt; 0);
     }

 } = new();

aepot
  • 49,560

0 Answers0