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을 포함 알고 '로그인 필터 이름을'David '로 설정하면 레코드를 반환하지 않을 것으로 예상됩니다.
나는 모든 곳에서 중단 점을 설정했으며 코드의 영원한 편이 '치다'.
내가 잘못 (분명히) 구현 했습니까?
감사
아니다, 그것은 정말 당신이 취소 및 업데이트, 그러나 그것을 대체 할 수있는 읽기 전용 컬렉션으로 정의되어야한다. Wpf는 목록이 제거 될 때 변경 사항을 처리하지 않습니다 (바인딩 될 수있는 가능한 다른 NotifyPropertyChanged 이벤트에 대해서도 생각하십시오). – Icepickle
@Icepickle 안녕하세요, 귀하의 의견을 보내 주셔서 감사합니다. 하지만 그것이 내 코드가하는 것입니다. 모든 것을 관찰 할 수있는 컬렉션을로드 한 다음 필터를 수행합니다. –