更改基础集合后,WPF DataGrid未正确呈现

时间:2010-11-18 06:52:54

标签: c# wpf data-binding datagrid c#-4.0

这是我的代码:

<Grid>
    <Button Content="Button" Click="button1_Click" />
    <DataGrid ItemsSource ="{Binding Lst}"  />
</Grid>

代码隐藏:

   private void button1_Click(object sender, RoutedEventArgs e)
    {
        (this.DataContext as Some).remove();
    }

DataSource是:

  public class Some : INotifyPropertyChanged
{
    private List<Point> lst = new List<Point>();
    public List<Point> Lst
    {
        get
        {
            return lst;
        }
    }

    public Some()
    {
        lst.Add(new Point(2.3, 5));
        lst.Add(new Point(267.3, 5));
        lst.Add(new Point(2.3, 65));
        lst.Add(new Point(2.63, 885));
        lst.Add(new Point(27.3, 65));

    }
    public void remove()
    {
        lst.Remove(lst.Last());
        if (PropertyChanged != null)
            PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Lst"));
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

当我调用remove()方法时,我从集合中删除项目并调用propertychanged。 UI反应是:我无法正确选择datagrid中与已删除Point对应的单元格。它们已删除。这看起来像UI bug,有没有解决方法?

很抱歉它太脏了 - 只是一个快速的样本。

谢谢,伊利亚

2 个答案:

答案 0 :(得分:2)

对于Lst使用ObservableCollection<>而不是List<> - ObservableCollection会自动通过添加,删除或清除来通知集合何时更改。您还需要一个DependencyProperty:http://forums.silverlight.net/forums/t/12664.aspx

答案 1 :(得分:1)

我将ItemSource绑定到视图模型,您的集合应该实现INotifyCollectionChangedObsevableCollection实际上是实现INotifyCollectionChanged的集合,从而通知WPF控件添加和删除的元素。