C # фильтр списка из выбора ComboBox с помощью LinQ - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть список с именем lstTickets и комбинированный список с именем cboFilter.Я пытаюсь отфильтровать элементы в моем списке на основе тикета. Область, которая находится в поле со списком.Так, например, если я выбираю из списка, это единственная команда в списке.Любая помощь приветствуется.

 List<Ticket> = new List<Ticket>()
    {
        new Ticket { Name = "Arsenal", Badge = "images/arsenal.jpg", Price = 900, Stadium = "emirates.jpg", District = "London" },
        new Ticket { Name = "Tottenham Hotspur", Badge = "images/tottenham.jpg", Price = 850, Stadium = "tottenham.jpg", District = "" },
        new Ticket { Name = "Manchester United", Badge = "images/.png", Price = 1000, Stadium = "oldtrafford.jpg", District = "" },
    };

 private void cboFilter_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
       var query = from Ticket in tickets where cboFilter.SelectedItem.ToString() == Ticket.District select Ticket;

        lstTickets.ItemsSource = null;
        lstTickets.Items.Clear();

        List<Ticket> tmp = new List<Ticket>();

        foreach (var tickets in query)
        {
            tmp.Add(tickets);

        }
        lstTickets.ItemsSource = tmp;

    }



                        <Image Width="200" Height="150" HorizontalAlignment="Left" Source="{x:Bind Badge }" />
                        <TextBlock FontSize="22" HorizontalAlignment="Left" Text="{x:Bind Name}" Style="{StaticResource HeaderTextBlockStyle}"/>
                        <TextBlock FontSize="16" HorizontalAlignment="Left"> € <Run Text="{Binding Price}" /></TextBlock>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

Редактировать: заполнение поля со списком в mainpage.cs

private void myGrid_Loaded(object sender, RoutedEventArgs e)
    {
    }

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Попробуйте проверить, что сначала у вас есть фактическое значение в cboFilter.SelectedItem, а затем, если вы сравниваете значения в нижнем регистре.Я предпочитаю использовать System.Linq, поэтому я изменил ваш запрос, чтобы использовать это:

private void cboFilter_SelectionChanged(object sender, SelectionChangedEventArgs e)
{

   var comboBoxItem = cboFilter.SelectedItem as ComboBoxItem;

   if(comboBoxItem == null) return; // or log an error here or something if it should not be empty.

   var query = tickets.Where(t => t.District.ToLower() == comboBoxItem.Content.ToString().ToLower());

    lstTickets.ItemsSource = null;
    lstTickets.Items.Clear();

    List<Ticket> tmp = new List<Ticket>();

    foreach (var tickets in query)
    {
        tmp.Add(tickets);

    }
    lstTickets.ItemsSource = tmp;

}
0 голосов
/ 07 декабря 2018

похоже, что свойство ToString () не работает для выбранного элемента.

var searchTerm=  cboFilter.SelectedItem.ToString();
var query = from Ticket in tickets where Ticket.District == term  select Ticket;

убедитесь, что вы поставили точку останова в поисковом запросе, чтобы увидеть, является ли ее правильное значение для получения

, но я думаю, что я знаю вашу проблему, выбранный элемент вернет весь объект так,сделайте следующее

var selectedTicked=  cboFilter.SelectedItem as Ticket;
var searchTerm= selectedTicket.District 
    var query = from Ticket in tickets where Ticket.District == term  select Ticket;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...