[英]C# Filter Listbox From ComboBox Selection Using LinQ
我有一個名為lstTickets的列表框和一個名為cboFilter的組合框。 我正在嘗試根據票證。組合框中的票證過濾列表框中的項目。 因此,例如,如果我從combox中選擇,則是列表框中的唯一團隊。 任何幫助表示贊賞。
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)
{
}
看起來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;
嘗試先檢查您在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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.