CollectionView 内的 Xamarin 更新数据不起作用

Xamarin Update data inside CollectionView doesn't work

我的页面中有一个 CollectionView 和一个与 class

绑定的标签名称
<CollectionView Grid.Column="0"
                    Grid.Row="1"
                    SelectionMode="Single"
                    ItemsSource="{Binding MarketplacePackages}">

            <CollectionView.ItemTemplate>
                <DataTemplate>
                    <StackLayout Orientation="Vertical">
                        <Label Text="{Binding Name}" />
                    </StackLayout>
                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>

然后我有一个 class 市场

public class MarketplacePackage
{
    public string Name { get; set; }
}

在我的 ViewModel 中我有

一个列表视图

List<MarketplacePackage> marketplacePackages;
    public List<MarketplacePackage> MarketplacePackages
    {
        get { return marketplacePackages; }
        set { SetProperty(ref marketplacePackages, value); }
    }

我初始化列表的构造函数

public MarketplaceViewModel()
    {
        Catalogue = new Command(onCatalogueClicked);
        MyDevice = new Command(onMyDeviceClicked);
        MyOrders = new Command(onMyOrderdsClicked);

        MarketplacePackages = new List<MarketplacePackage>() {
            new MarketplacePackage()
            {
                Name = catalogueList[0],
            },
            new MarketplacePackage()
            {
                Name = catalogueList[1]
            },
            new MarketplacePackage()
            {
                Name = catalogueList[2]
            },
            new MarketplacePackage()
            {
                Name = catalogueList[3]
            }
        };

        //this works!
        //MarketplacePackages[0].Name = "String";
    }

当我调用 onClickMethod 时,我尝试更改 listView 中的数据

private async void onCatalogueClicked()
    {
        MarketplacePackages[0].Name = "String";
    }

您的 MarketplacePackage class 必须实现 INotifyPropertyChanged 接口(或者如果您使用 XamarinCommunityToolkit 或 MvvmHelpers,则从 ObservableObject 继承)并在 Name 属性 已更改。

例如:

public class MarketplacePackage : ObservableObject
{
    string name;
    public string Name { get => name; set => SetProperty(ref name, value); }
}

当您在 ViewModel 的构造函数中 set/change Name 属性 时有效,因为 View 在构造函数完成后读取初始值。