我有一個帶有網格的ListView ItemTemplate的ListView。 我需要單擊的行的信息,並在ListView上具有IsItemClickEnabled=True
,並且需要具有顯示行ID的調試的ItemClick
事件處理程序。爲什麼ItemClick事件處理程序返回先前點擊的項目?
我不能弄清楚爲什麼返回的項目總是我之前點擊的項目,而第一次點擊什麼都不產生。
這裏是爲ListView
<ListView x:Name="ListCustomerView" ItemsSource="{x:Bind CustomersFromDB}" Grid.Row="1" HorizontalAlignment="Center" IsItemClickEnabled="True" ItemClick="ListCustomerView_ItemClick">
<ListView.ItemTemplate>
<DataTemplate>
<Grid IsTapEnabled="False">
<Grid.ColumnDefinitions>
<ColumnDefinition MinWidth="{StaticResource minColumnWidth}" MaxWidth="{StaticResource maxColumnWidth}"></ColumnDefinition>
<ColumnDefinition MinWidth="{StaticResource minColumnWidth}" MaxWidth="{StaticResource maxColumnWidth}"></ColumnDefinition>
<ColumnDefinition MinWidth="{StaticResource minColumnWidth}" MaxWidth="{StaticResource maxColumnWidth}"></ColumnDefinition>
<ColumnDefinition MinWidth="{StaticResource minColumnWidth}" MaxWidth="{StaticResource maxColumnWidth}"></ColumnDefinition>
<ColumnDefinition MinWidth="{StaticResource minColumnWidth}" MaxWidth="{StaticResource maxColumnWidth}"></ColumnDefinition>
<ColumnDefinition MinWidth="{StaticResource minColumnWidth}" MaxWidth="{StaticResource maxColumnWidth}"></ColumnDefinition>
<ColumnDefinition MinWidth="{StaticResource minColumnWidth}" MaxWidth="{StaticResource maxColumnWidth}"></ColumnDefinition>
<ColumnDefinition MinWidth="{StaticResource minColumnWidth}" MaxWidth="{StaticResource maxColumnWidth}"></ColumnDefinition>
<ColumnDefinition MinWidth="{StaticResource minColumnWidth}" MaxWidth="{StaticResource maxColumnWidth}"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding CompanyName}"></TextBlock>
<TextBlock Grid.Column="1" Text="{Binding FirstName}"></TextBlock>
<TextBlock Grid.Column="2" Text="{Binding LastName}"></TextBlock>
<TextBlock Grid.Column="3" Text="{Binding Phone}"></TextBlock>
<TextBlock Grid.Column="4" Text="{Binding Email}"></TextBlock>
<TextBlock Grid.Column="5" Text="{Binding Adress}"></TextBlock>
<TextBlock Grid.Column="6" Text="{Binding PostCode}"></TextBlock>
<TextBlock Grid.Column="7" Text="{Binding PostArea}"></TextBlock>
<TextBlock Grid.Column="8" Text="{Binding Comment}"></TextBlock>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
這裏的標記是用於CustomersFromDB的ItemsSource
public List<Customer> CustomersFromDB { get; set; }
var db = new Database();
CustomersFromDB = db.FetchCustomer();
public List<Customer> FetchCustomer()
{
using (SQLiteConnection _connection = new SQLiteConnection(sqlitePlatform, dbFilePath))
{
List<Customer> customers = new List<Customer>();
var _customers = _connection.Table<Customer>();
if (_customers.Count() > 0)
{
foreach (Customer customer in _customers)
{
customers.Add(customer);
}
}
return customers;
}
}
代碼和事件處理程序
private void ListCustomerView_ItemClick(object sender, ItemClickEventArgs e)
{
// BUG! the selected item is not firing correctly ending up outputting the previous clicked item
Debug.WriteLine((sender as ListView).SelectedItem);
}
如上圖所示檢索到客戶,但是當我點擊一行時,id是之前被點擊的,如果是第一次點擊,則爲null。
爲什麼這種奇怪的行爲發生?
你確定事件的順序沒有在ItemClick之後設置SelectedItem嗎?如果您想在SelectedItem更改時發生事件,則會出現['SelectionChanged']事件(https://msdn.microsoft.com/zh-cn/library/system.windows.controls.primitives.selector.selectionchanged( v = vs.110).aspx)。 –