簡體   English   中英

Xamarin.Forms - 如何使用 ObservableCollection 從包含 ListView 中選擇項目

[英]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中,您依賴MyListSelectedItem屬性。 但是,單擊“刪除”按鈕不會自動選擇該列表項。 確定要刪除的正確項目的方法是查看發送刪除單擊的按鈕的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM