<CollectionView ItemsSource="{Binding MyItems}">
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout>
<Label Text="{Binding ItemStatus}" />
<Label Text="{Binding ItemId}" />
<Label Text="{Binding ItemDescription}" />
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
我尝试从 INotifyPropertyChanged 的 OnPropertyChanged 更新 ItemStatus,但它使用相同的值更新每个项目数据的所有 ItemStatus。 我知道这是正常行为,因为 ItemStatus 属性名称在每个项目数据中找到自己。
我还尝试使用 x:Name 作为 ItemStatus 标签,但它不起作用;我在 Microsoft 网站上看到 DataTemplate 为其中的所有元素创建了一个新范围,
我也在考虑创建动态元素,但不确定是否可行。
顺便说一下,我只想动态更新特定 ItemId/Item Data 的 ItemStatus,
我记得在 HTML/CSS/Javascript 中有一种 CLASS 和 ID 元素,您可以在页面的任何位置从 javascript 方法访问它们。
请问有人知道如何实现吗?
private string itemStatus = "Still in progress";
public string ItemStatus
{
get => itemStatus;
set
{
if (value == itemStatus)
return;
itemStatus = value;
OnPropertyChanged(nameof(ItemStatus));
}
}
private void UpdateUIItemStatusMessage(string uniqueMessage)
{
ItemStatus = $"Completed !!!";
}
使用 LINQ
using System.Linq;
...
var item = MyItems.FirstOrDefault(x => x.ItemID == SelectedItemID);
item.ItemStatus = "some new status";