You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向NotifyPropertyChanged方法告知无显式名称的索引器属性变更

实现方案

索引器的属性变更通知可以通过指定格式的属性名字符串实现,.NET 平台默认索引器对应的属性名为Item,通知单个索引位置变更的字符串格式为 Item[索引值],适配你使用的 Xamarin.Forms 绑定规则。

1. 修改通知方法

将你的NotifyPropertyChanged方法修改为如下实现即可:

private void NotifyPropertyChanged(int index = 0)
{
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs($"Item[{index}]"));
}

调用示例:需要通知索引7的位置变更时,执行NotifyPropertyChanged(7)即可触发XAML中{Binding [7]}对应的绑定更新。

2. 其他场景用法

  • 通知所有索引器项变更:传入属性名Item[]
  • 如果你通过[IndexerName]特性自定义了索引器名称,替换上述字符串中的Item为你自定义的名称即可
  • 通知所有属性变更:直接传入空字符串即可

优化建议

  1. 先修正现有代码的语法错误:Placeholder类的构造函数中resourceID大小写不匹配,需要和参数名一致改为resourceId
  2. 如果需要直接通过索引器修改资源ID,可以给索引器添加set访问器,赋值时自动触发通知:
public string this[int index]
{
    get => List[index].ResourceId;
    set
    {
        if (List[index].ResourceId != value)
        {
            List[index].ResourceId = value;
            NotifyPropertyChanged(index);
        }
    }
}
  1. 如果后续需要直接修改List中Placeholder实例的ResourceId属性,需要让Placeholder类也实现INotifyPropertyChanged接口,否则修改ResourceId时不会自动触发UI更新。

内容的提问来源于stack exchange,提问作者Luca Hafer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 02:36:05