msdn에는 += 를 이용한 FilterEventHandler 등록이 가능한 것으로 나와 있으나 ex. listingDataView.Filter += new FilterEventHandler(ShowOnlyBargainsFilter);

문법적인 오류가 나서 확인하지 못했음

그래서 저같은 경우 object를 받아서 처리하는 필터함수를 만들어서 Filter Property에 저장하는 식으로 사용했습니다.

 

 

함수 등록

CollectionView leftView = (CollectionView)CollectionViewSource.GetDefaultView(PcPhoneBookLsv.ItemsSource);
leftView.Filter = new Predicate<object>(PhoneBookSearchFilter);

 

함수 등록 해지

CollectionView leftView = (CollectionView)CollectionViewSource.GetDefaultView(PcPhoneBookLsv.ItemsSource);           
                leftView.Filter = null;

 

등록된 함수

private bool PhoneBookSearchFilter(object e)
        {
            PhonebookItem pbItem = e as PhonebookItem;
            string searchStr = ui_txtSearch.Text;
            if (searchStr == "")//검색어가 없을때
            {
                //e.Accepted = true;               
                return true;
            }
            //PhonebookItem pbItem = e.Item as PhonebookItem;
            if (pbItem != null)
            {
                if ((pbItem.FirstName.Contains(searchStr)) || (pbItem.LastName.Contains(searchStr)) || ((pbItem.LastName + pbItem.FirstName).Contains(searchStr)) ||
                    (pbItem.MobileNum.Contains(searchStr)) || (pbItem.HomeNum.Contains(searchStr)))
                {//지정 필드가 검색어를 포함할 경우
                    //e.Accepted = true;
                    return true;
                }
                else
                {//포함하지 않을 경우
                    //e.Accepted = false;
                    return false;
                }
            }
            else
                return false;
        }

이 글은 스프링노트에서 작성되었습니다.

by 무위자연 2008. 11. 17. 05:31