Xamarin 动态更新 CollectionView 中的特定 DataTemplate 项目属性具有唯一值

问题描述 投票:0回答:1
<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 !!!";
}

xamarin xamarin.forms xamarin.android monodevelop
1个回答
0
投票

使用 LINQ

using System.Linq;

...

var item = MyItems.FirstOrDefault(x => x.ItemID == SelectedItemID);
item.ItemStatus = "some new status";
© www.soinside.com 2019 - 2024. All rights reserved.