Обновление списка после добавления элемента в DataContext - PullRequest
1 голос
/ 04 октября 2010

Добрый день,

Я пытаюсь использовать как текстовый текст Linq to SQL для ListBox в WPF.

В основном я назначаю Linq DataContext свойству DataContext формы.Затем я привязываю его к списку.ItemsSource.

Все отлично работает, я могу показать детали каждого из моих элементов в текстовом поле (схема основных деталей).

Дело в том,, Я хотел бы иметь возможность добавить новый элемент в список:

private void Button_Click(object sender, RoutedEventArgs e)
    {

        Button btn = sender as Button;

        var table = lst_markets.ItemsSource as System.Data.Linq.Table<Market>;
        table.InsertOnSubmit(new Market() { IdMarket = Guid.NewGuid(), Name = txt_newmarket.Text });
        table.Context.SubmitChanges();
    }

Значение действительно добавляется в базу данных, но ListBox не обновляется.

Что я долженсделать, чтобы обновить список?

Спасибо,

Джереми

1 Ответ

2 голосов
/ 04 октября 2010

Table<TEntity> не реализует INotifyCollectionChanged, поэтому менеджер привязок не получает уведомления об изменении содержимого коллекции.

Несколько вариантов для вас:

  • сохраняйте ObservableCollection, который вы заполняете из таблицы, и сохраняйте синхронизацию. Когда вы добавляете / удаляете элементы из него, список будет синхронизироваться через привязку. См. Эту статью для чего-то подобного
  • Разберитесь - установите lst_markets.ItemsSource в null и вернитесь к таблице при изменении коллекции. Это может привести к полному повторному связыванию и похоже на грязный хак, но должно работать.
  • Не делай этого ! Table<T> не является коллекцией - она ​​представляет запрос. Привязать к коллекции вместо этого. Если я правильно помню, каждый раз, когда вы выполняете итерацию таблицы, она запрашивает базу данных, а это означает, что каждый раз, когда окно списка чувствует, что ему нужно перечислить, или менеджер привязок, или ваш код пользовательского интерфейса делают то же самое, вы нажимаете на базу данных.
  • В этом сообщении на форуме есть ObservableEntitySetWrapper, который может дать вам некоторые идеи.

Также см. Этот вопрос SO: Как обновить сетку данных WPF?

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