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 在构造函数完成后读取初始值。
我的页面中有一个 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 在构造函数完成后读取初始值。