У меня есть приложение для рабочего стола wpf.combo box не обновляется, когда наблюдаемые изменения коллекции
У меня есть раскрывающийся список, и его источник элементов установлен в наблюдаемую коллекцию.
Целью является отображение списка пользователей. У меня есть кнопка в этой форме, которая удалит выбранного пользователя. Он устанавливает поле 'Active' в '0', где '1' не удаляется.
Проблема в том, что хотя я вижу, что наблюдаемая коллекция была уменьшена на 1. Но визуально выпадающий список показывает все исходные состояния пользователя.
Это моя XAML:
<ComboBox ItemsSource="{Binding Users}" DisplayMemberPath="Login"
SelectedValue="{Binding SelectedManagerUser}" />
Это бит VM его:
public ObservableCollection<UserRecord> Users
{
get
{
return (from users in UserRecord.Get().Where(d => d.Active == 1)
select new UserRecord
{
FName = users.FName,
SName = users.SName,
UserRecordId = users.UserRecordId,
Login = users.Login,
IsAdmin = users.IsAdmin,
UserRef = users.UserRef,
Disabled = users.Disabled,
Branch = users.Branch,
Department = users.Department,
Position = users.Position,
Salt = users.Salt,
}).OrderBy(d => d.Login).ToList();
}
set {
_Users = value; RaisePropertyChanged(InformedWorkerCommon.Constants.VM_Users); }
}
Мой ПОКО/Модель:
public class UserRecord
{
public int UserRecordId { get; set; }
public string FName { get; set; }
public string SName { get; set; }
public string Login { get; set; }
public string Salt { get; set; }
public int IsAdmin { get; set; }
public string UserRef { get; set; }
public int Disabled { get; set; }
public string Branch { get; set; }
public string Position { get; set; }
public int Active { get; set; }
public string Department { get; set; }
public string ServerRef { get; set; }
public DateTime ServerTS { get; set; }
}
Это код, который устанавливает Активное поле к «0»:
мой тест включает в себя предварительную загрузку с 2 пользователей
private void DeleteUser()
{
try
{
в этот момент пользователи подсчитывать является 2
UserRecord.Save(new UserRecord()
{
UserRef=UserRef,
Branch = Branch,
Department = Department,
Disabled = Disabled == true ? 1 : 0,
FName = FName,
IsAdmin = 0,
Login = Login,
Position = Position,
SName = SName,
Active = 0,
});
в данный момент сосчитать пользователей является 1, но выпадающие все еще показывает 2 пользователей
DisplayInfoMessage(Properties.Resources.Deleted);
}
}
}
catch (Exception ex)
{
//handle the error
}
}
Я относительно новым для Wp f, чтобы я мог сделать правильный ревун здесь?
Является ли значение InformedWorkerCommon.Constants.VM_Users «Пользователями», чтобы уведомить об этом поле со списком? Кажется, вы не устанавливаете свойство в любом месте, так как ваш получатель просто все еще читает из базы данных. Вам не нужен сеттер для свойства Users, достаточно сообщить, что правильная привязка была изменена из функции удаления. –
Я немного удивлен, что метод 'Delete()' реализуется как 'Сохранить (новый UserRecord {...})'. Однако, предполагая, что 'Save' будет по-прежнему поступать правильно, возможно, вам нужно только обновить' Binding' в '' ComboBox''. 'ObservableCollection' не будет уведомлять автоматически, когда изменилось только свойство элемента. Я думаю, что здесь будет полезен код 'UserRecord.Save'. – wkl
Привет, спасибо за ваше предложение.Существует причина, по которой удаление происходит так, как есть, и, возможно, все по неправильным причинам :) Я проверю, когда вернусь в офис. Спасибо u –