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

Grid重排序后未移动项未更新问题排查

问题原因

核心问题是你的实体类未实现INotifyPropertyChanged接口。

ObservableCollection的CollectionChanged事件仅会通知UI集合结构的变化(比如项的增删、移动),但集合内单个对象的属性变更,需要对象自身触发属性变更通知,UI才会刷新。你现在只是修改了Key属性的值,却没给UI传递属性变更的信号,因此除了被移动的项(集合结构变化触发了UI重绑),其他项的Key不会更新。

解决方案
  1. 给实体类实现INotifyPropertyChanged接口
    假设你的实体类名为MyItem,修改代码如下:

    public class MyItem : INotifyPropertyChanged
    {
        private int _key;
        public int Key
        {
            get => _key;
            set
            {
                if (_key != value)
                {
                    _key = value;
                    OnPropertyChanged(nameof(Key));
                }
            }
        }
    
        public string Text { get; set; } // 你的string类型属性,建议同样添加属性变更通知
    
        public event PropertyChangedEventHandler PropertyChanged;
    
        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    
  2. 保留原有的CollectionChanged事件处理逻辑
    你原本遍历更新Key的代码逻辑是正确的,现在实体类支持属性变更通知后,修改Key时会自动触发UI刷新,所有项的Key都会同步更新。

补充说明

绑定模式OneWay是可行的,只要属性变更通知触发,OneWay绑定会自动更新UI显示。之前仅移动的项更新,是因为该项的位置变化触发了UI的重新绑定,而其他项的属性变更没有通知机制,导致UI保留旧值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 20:16:15