详情页删除商品后如何更新父商品?

问题描述 投票:0回答:1

当我点击一个项目时,我有一个包含项目的 CollectionView,应该使用删除或更新按钮重定向到详细信息页面。当我进行操作时,我应该如何刷新父collectionview?

CollectionviewPage 的 ViewModel:

public class TestViewModel : BaseViewModel
{
    public ObservableCollection<TestItem> TestItems { get; set; }
        
    public TestViewModel()
    {
        TestItems = new ObservableCollection<TestItem>
        {
            new TestItem { Id = 1, Title = "Test Item 1" },
            new TestItem { Id = 2, Title = "Test Item 2" },
            new TestItem { Id = 3, Title = "Test Item 3" }
        };

        ItemSelectedCommand = new Command(OnItemSelected);
    }


    [RelayCommand]
    private void OnItemSelected(TestItem selectedItem)
    {
        await Shell.Current.Navigation.PushAsync(new DetailsPage(selectedItem));
    }
}

详情页的ViewModel:

public class DetailsPageModel : BaseViewModel
{
    TestItem _item;
    
    public TestViewModel(TestItem item)
    {
        _item = item;
    }


    [RelayCommand]
    private async void Delete()
    {
        // Mock Delete from db
       await _repository.Delete(_item);
       await Shell.Current.Navigation.PopAsync();
    }
}

因此,在这种情况下,我从数据库中删除该项目,但是我应该如何从详细信息页面通知父级它应该更新?我是否应该将整个列表传递到详细信息页面并从那里删除,似乎没有效果?

c# mvvm maui
1个回答
0
投票

我可以为您的实施提供一种快速解决方案,但不是最好的解决方案,在您的构造函数中传递一个操作,并在您想要更新列表时调用。

[RelayCommand]
private void OnItemSelected(TestItem selectedItem)
{
    await Shell.Current.Navigation.PushAsync(new DetailsPage(selectedItem, RemoveItem));
}

private void RemoveItem(TestItem selectedItem)
{
    TestItems.Remove(selectedItem)
}

详情页:

public class DetailsPageModel : BaseViewModel
{
    TestItem _item;
    private Action<TestItem> _removeItemAction;
    
    public TestViewModel(TestItem item, Action<TestItem> removeItemAction)
    {
        _item = item;
        _removeItemAction = removeItemAction;
    }


    [RelayCommand]
    private async void Delete()
    {
        // Mock Delete from db
       await _repository.Delete(_item);
       _removeItemAction.Invoke(_item);
       await Shell.Current.Navigation.PopAsync();
    }
}

我建议您开始使用 Shell Navigation 传递数据https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/shell/navigation?view=net-maui-8.0#pass-data

© www.soinside.com 2019 - 2024. All rights reserved.