![](/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.