可观察的集合集合改变了问题

时间:2011-01-14 18:59:30

标签: wpf observablecollection

我正在学习可观察的集合,所以我写了一个小程序来测试我的进度。 我有一个可观察的集合类,我从列表中提供初始值并将observablecollection绑定到Datagrid。它工作得很好,但是当我使用myListOfPlayers.myList.Clear()清除列表时,Datagrid不会清除。我以为INotifyPropertyChanged属性会处理它。我做错了什么?

public class PlayerList : ObservableCollection<PlayerName> //observable collection class
    {
        public PlayerList()
            : base()
        {
            Clear();

            foreach (var p in myListOfPlayers.myList.OrderBy(x => x.Score))
            {
                Add(p);
            }
        }

        public PlayerList(List<PlayerName> list)
            : base(list)
        {
            Clear();

            foreach (var p in list)
            {
                Add(p);
            }
        }
    }

我在PlayerName类中实现了INotifyPropertyChanged:

public class PlayerName : INotifyPropertyChanged
    {
        private string _name;

        public string Name
        {
            get { return _name; }
            set
            {
                _name = value;
                OnPropertyChanged("Name");
            }
        }

        private int _score;

        public int Score
        {
            get { return _score; }
            set
            {
                _score = value;
                OnPropertyChanged("Score");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(string propertyName)
        {
            var handler = PropertyChanged;

            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

如果您清除myListOfPlayers.myList,则PlayerList不应被清除......这两个列表之间没有任何关系:您刚刚使用myListOfPlayers.myList来初始化PlayerList的内容{1}},但它们是两个不同的列表。你在其中一个上做的事情不会影响其他人