WPF DataGrid не отображается должным образом после изменения базовой коллекции - PullRequest
0 голосов
/ 18 ноября 2010

Вот мой код:

<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() метод, яудалите элемент из коллекции и вызовите propertyaged.Реакция пользовательского интерфейса: я не могу правильно выбрать ячейки в сетке данных, которые соответствуют удаленному Point.Они не удалены.Это похоже на ошибку пользовательского интерфейса, есть ли обходной путь?

Извините, что он такой грязный - просто быстрый пример.

Спасибо, Илья

Ответы [ 2 ]

2 голосов
/ 18 ноября 2010

Используйте ObservableCollection<> вместо List<> для Lst - ObservableCollection автоматически уведомляет, когда коллекция изменяется посредством добавления, удаления или удаления.Вам также потребуется DependencyProperty: http://forums.silverlight.net/forums/t/12664.aspx

1 голос
/ 18 ноября 2010

В случае привязки ItemSource к модели представления ваша коллекция должна реализовывать INotifyCollectionChanged.На самом деле ObsevableCollection - это коллекция, которая реализует INotifyCollectionChanged, таким образом уведомляя элементы управления WPF о добавленных и удаленных элементах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...