![](/img/trans.png)
[英]How can I select an item in a ListView in Xamarin.Forms with XAML
[英]Xamarin.Forms - How to select item from its containing ListView with ObservableCollection
如圖所示,我有一個綁定到ObservableCollection<ItemID>
的ListView
。 當我單擊刪除按鈕時,它會正確調用DeleteButton_Clicked
,但隨后無法訪問對象。 我需要刪除對象,然后更改Scan.Text
屬性。 感謝您的任何幫助。
ItemID
類在此處定義:
public class ItemID
{
public string Name { get; set; }
public string Age { get; set; }
public double Value { get; set; }
}
這是給我帶來麻煩的代碼:
private void DeleteButton_Clicked(object sender, EventArgs e)
{
ItemID items = MyList.SelectedItem as ItemID;
Items.Remove(items);
MyList.SelectedItem = null;
Scan.Text = items.Value.ToString(); // it doesn't work
}
Scan 按鈕創建一個對象並更改 Scan.Text:
private async void ButtonScanDefault_Clicked(object sender, EventArgs e)
{
ZXingScannerPage scanPage;
scanPage = new ZXingScannerPage();
scanPage.OnScanResult += (result) =>
{
scanPage.IsScanning = false;
Device.BeginInvokeOnMainThread(async () =>
{
await Navigation.PopModalAsync();
await DisplayAlert("Scanned Barcode", result.Text, "OK");
Scan.Text = SumCost(Cost_Product(result.Text));
var item = new ItemID()
{
Name = "Name_ID:" + " " + result.Text,
Age = "Age:" + " " + Cost_Product(result.Text),
Value = Cost_Product(result.Text)
};
Items.Add(item);
});
};
await Navigation.PushModalAsync(scanPage);
}
XAML
<ListView Grid.Row="1"
ItemsSource="{Binding Items}"
HasUnevenRows="True"
x:Name="MyList">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid Margin="10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Text="{Binding Name}" />
<Button Clicked="DeleteButton_Clicked"
Grid.Column="1"
Padding="30,10"
Text="Delete"
HorizontalOptions="EndAndExpand"
BackgroundColor="Black"
TextColor="White" />
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
這可能是問題所在:在您的DeleteButton_Clicked
中,您依賴MyList
的SelectedItem
屬性。 但是,單擊“刪除”按鈕不會自動選擇該列表項。 確定要刪除的正確項目的方法是查看發送刪除單擊的按鈕的BindingContext
屬性,並將此對象轉換為ItemID
。
private void DeleteButton_Clicked(object sender, EventArgs e)
{
// The sender is the button you clicked
Button button = (Button)sender;
// The binding context of the button IS the
// item associated with the button.
ItemID item = (ItemID)button.BindingContext;
Items.Remove(item);
// Now you can adjust the Scan.Text however you want.
// THIS IS JUST AN EXAMPLE
ItemID defaultScanItem = Items.FirstOrDefault();
if (defaultScanItem == null)
{
Scan.Text = $"[Deleted {item.Name}]";
}
else
{
Scan.Text = $"[Deleted {item.Name}] Scan {defaultScanItem.Name}";
}
}
刪除前后
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.