#observablecollection
#observablecollection
Вопрос:
Observablecollection привязан к gridview в проекте UWP. Если я попытаюсь очистить и добавить данные, это завершится ошибкой, потому что они могут быть изменены только в потоке пользовательского интерфейса.
Я настроил service broker с SQL, чтобы уведомлять приложение при изменении данных. Это работает правильно. Однако каждый раз, когда я пытаюсь очистить и изменить observablecollection, я получаю исключение.
using (SqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
EmployeeLists.Add(new Employee { Name = dr[0].ToString(), Loc = dr[2].ToString() });
}
}
Это код, который я использую сначала для заполнения наблюдаемой коллекции. Я хочу прослушать изменения, которые работают. Но как мне обновить изменения и синхронизировать их с наблюдаемой коллекцией?
Я попытался очистить observablecollection списка сотрудников, а затем добавить все снова. Это кажется неуклюжим, но все равно не работает, потому что говорит, что я не могу изменить из другого потока. Я попробовал несколько решений онлайн, но я не настолько знаком с асинхронным программированием. Кто-нибудь может указать мне правильное направление?!
Комментарии:
1. хорошо, я частично решил проблему, запустив код в потоке пользовательского интерфейса с помощью диспетчера …. однако код слишком неуклюж. Способ, которым я это делаю, заключается в очистке observablecollection и последующем добавлении всего обратно, когда в базе данных происходят изменения. Должен быть способ получше?!
2. хорошо, добираемся медленно. Я могу изменять объекты в наблюдаемой коллекции один за другим, используя « var item = EmployeeLists. FirstOrDefault (i => i.Name == dr[0]. toString()); « но единственный способ, которым я могу обновить привязанный gridview, — это отменить привязку. это также занимает ок. 20 секунд на обновление …. так что не идеально. Я взгляну на оптимизацию. Какие-нибудь советы?!