У меня есть приложение для рабочего стола WPF.Почему мой ObservableCollection не фильтр
Загружаю ObservableCollection список объектов.
Я использую объект ICollectionView для обертывания фильтра вокруг этого ObservableCollection.
Я установил фильтр и обновить, но он Nto работает так:
public class DataFilters : ViewModelBase
{
private ICollectionView _UserMappedRolesView { get; set; }
private ObservableCollection<UserMappedRoles> _UserMappedRoles;
public ObservableCollection<UserMappedRoles> UserMappedRoles
{
get
{
_UserMappedRolesView = CollectionViewSource.GetDefaultView(_UserMappedRoles);
_UserMappedRolesView.Filter = UserMappedRolesFilter;
_UserMappedRolesView.Refresh();
return _UserMappedRoles;
}
set
{
_UserMappedRoles = value;
}
}
public void LoadUserMappedRoles()
{
var baseData = InformedWorkerBusinessService.UserMappedRoles.Get();
var modelData =
from data in baseData
select new UserMappedRoles
{
Enabled = 1,
Login = data.Login,
UserMappedRolesRef = data.UserMappedRolesRef,
UserRoleRef = data.UserRoleRef
};
_UserMappedRoles = new ObservableCollection<UserMappedRoles>(modelData);
}
public string Login { get; set; }
private bool UserMappedRolesFilter(object item)
{
UserMappedRoles UserMappedRole = item as UserMappedRoles;
if (UserMappedRole.Login== Login)
{
return true;
}
else
{
return false;
}
}
}
и мой тестовый скрипт:
UI.InformedWorkerViewModel.Models.HeartBeat VM = new UI.InformedWorkerViewModel.Models.HeartBeat();
VM.CommonData.DataFilters = new UI.InformedWorkerViewModel.Models.DataFilters();
VM.CommonData.DataFilters.LoadUserMappedRoles();
var data = VM.CommonData.DataFilters.UserMappedRoles;
VM.CommonData.DataFilters.Login = "David";
var filtered = VM.CommonData.DataFilters.UserMappedRoles;
Я знаю, что мои данные содержат только oUserMappedRoles где имя Логин является «Энди «поэтому, установив имя фильтра входа в« Давид », я ожидаю, что никаких записей не будет возвращено.
Я установил точки останова всюду, и каждая строка кода получает «удар».
У меня (очевидно) реализовано это неправильно?
Благодаря
Это не очень хорошая практика, чтобы изменить ObservableCollection, это действительно должно быть определено как только для чтения коллекции, вы можете очистить и обновление, но не заменить его. Wpf не обрабатывает изменения так хорошо, когда список удаляется (также подумайте о возможных других событиях NotifyPropertyChanged, которые могут быть привязаны к нему) – Icepickle
@Icepickle Привет, спасибо за ваш комментарий. Но это то, что делает мой код. он загружает наблюдаемую коллекцию всего лишь один раз, а затем я выполняю фильтры на нем –