Silverlight中一个关于集合绑定的错误


前天在公司做项目时遇到了一个问题,头痛了我很长时间。
具体问题不描述了,举个例子:
我想让程序运行中改变ComboBox的ItemsSource中的数据。代码胡乱写了点

看下代码,AData是我遇到的问题,BData是改正后的。
AData和BData唯一的不同点在Change()方法中。

public class Model : INotifyPropertyChanged
{
    public List<string> AData { get; set; }
    public List<string> BData { get; set; }
    //初始化点数据
    public Model()
    {
        AData = new List<string>();
        BData = new List<string>();
        for (int i = 0; i < 8; i++)
        {
            AData.Add("AAA" + i);
            BData.Add("BBB" + i);
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged(string name)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(name));
    }

    //改变数据
    public void Change()
    {
        BData = new List<string>();//关键在这里
        AData.Clear();             //唯一的不同点

        for (int i = 10; i < 18; i++)
        {
            AData.Add("AAA" + i);
            BData.Add("BBB" + i);
        }
        OnPropertyChanged("AData");
        OnPropertyChanged("BData");
    }
}
将AData和BData分别绑定到两个ComboBox的ItemsSource上。程序运行后先看一下两个ComboBox中的数据(一定要点开看看),然后执行Change()方法。
当执行完Changed()方法后,问题来了,绑定AData的那个ComboBox的数据并没有改变,问题很奇怪。执行完OnPropertyChanged("AData");后确实调AData的get方法了。
不知道是我的想法不对,还是我没有理解好,最后重新new出来一个List,却把问题解决了。

ps.还有点要说明的,如果ComboBox不点开,在执行Change后,数据倒是改变了。

不知道大家遇到过这个问题没有,以后进行集合绑定时一定得想清楚,对于AData来说用ObservableCollection<T>估计没有问题了。

posted @ 2011-03-04 22:46  Honker Snow  阅读(430)  评论(2编辑  收藏  举报