Привязка изменяющейся коллекции к combobox
Итак, вот в чем дело. В приложении WPF я заполняю
BindableCollection
(видеть: Калибурн.Микро[^]) из конструктора ViewModel.Вот конструктор:
public UsersViewModel(IUsersUoW uow, IEventAggregator eventAggregator) : base(uow, eventAggregator) { DisplayName = "Users"; Users = new BindableCollection<User>(_uow.userrepo.FetchAll()); }
Короче говоря, _uow-это моя единица работы, а userrepo-мой репозиторий. Таким образом, это фактически заполняет свойство Users, которое, на мой взгляд, привязано к Combobox. Существует свойство SelectedUser, которое указывает на выбранный элемент ComboBox. Теперь в поле зрения находится множество текстовых полей, которые отображают различные свойства SelectedUser. Свойства можно редактировать, редактируя текст в текстовом поле.
Теперь, чтобы сохранить изменения, у меня есть такой метод:
public void Modify() { var currentuser = _uow.userrepo.Find(SelectedUser.ID); currentuser.addr = Address; //save other properties _uow.userrepo.Update(currentuser); _uow.Complete(); Status = "Modified!"; }
Проблема в том, что это изменение правильно сохраняется в БД, но когда я меняю выбранный элемент в ComboBox на какой-то другой элемент, а затем меняю его обратно на элемент, который я редактировал, отображаются устаревшие данные.
Метод обновления репозитория таков:
virtual public void Update(T updatedentity) { _ctx.Set<T>().Attach(updatedentity); _ctx.Entry(updatedentity).State = EntityState.Modified; }
Что я уже пробовал:
Одним из способов решения этой проблемы является повторное заполнение ComboBox после внесения изменений. Но мне кажется, что это клуджи.
Каков стандартный протокол, чтобы избежать устаревших данных, подобных этому? Должен ли я сделать пользователей недвижимости такими?
public BindableCollection<User> Users => new BindableCollection<User>(_uow.userrepo.FetchAll());
В этом случае, я думаю, будет удар по производительности, так как каждый раз, когда я обращаюсь к ComboBox, будет доступен репозиторий.