2010-11-18 56 views
0

這裏是我的代碼:WPF的DataGrid是不會改變之後正確地呈現底層集合

<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(); 
    } 

數據源是:

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錯誤,是否有任何解決方法?

對不起,它太髒了 - 只是一個快速樣品。

感謝,伊利亞

回答

2

使用ObservableCollection<>而不是List<>的LST - 的的ObservableCollection自動通知時,通過收集變化添加,刪除或清除。您還需要一個DependencyProperty:http://forums.silverlight.net/forums/t/12664.aspx

+0

謝謝!現在我知道ObservableCollection用於什麼:) – 2010-11-18 07:18:11

+0

依賴項屬性不是必需的。您只需通過實現INotifyPropertyChanged和INotifyCollectionChanged接口即可使用視圖模型。 – Bulat 2010-11-18 07:29:52

1

如果將綁定ItemSource綁定到視圖模型,您的集合應實現INotifyCollectionChangedObsevableCollection實際上是實現INotifyCollectionChanged的集合,因此通知添加和刪除元素的WPF控件。