요즘들어 WPF 에 놀라는 때가 하루 이틀이 아니다. 하면 할수록 어려운 것 같다는 생각도 들고 데이터 바인딩을 하다보면 나는 아직 멀었구나 싶다. ㅡㅡ; 흠냐~ 각설하고~
사실은 History 기능이나 AutoComplete 기능을 만들려 하고 있는데 하다보니깐 ICollectionView 에 Filtering 을 추가하는 것이 가장 좋을 것 같다는 생각을 하였다. 이래저래 따져보아도 이넘을 사사용하는 것 가장 편할 것 같더라는…
ICollectinView 에는 Filter 속성이 있는데 이에대한 MSDN 설명은 아래와 같다.
“항목이 부에 포함되기에 적합한지 여부를 결정하는데 사용되는 콜백을 가져오거나 설정합니다.”
또한 Filter 를 설정할때는 Predicate<T> 델리게이트 메소드를 사용해주는 형식을 취하도록 하고, 실제 Filtering 관련된 기능은 그 안에서 구현하면 된다.
예제의 경우에는…
private void textBox1_TextChanged(object sender, TextChangedEventArgs e) { Persons.Filter = new Predicate<object>(PersonSearchFilter); } |
Textbox 의 TextChanged 이벤트에 Filter 를 설정해준 다음 아래와 같이 구현해 주었다.
private bool PersonSearchFilter(object e) { Person personItem = e as Person; if (personItem != null) { if (personItem.Name.ToLower().Contains(textBox1.Text.ToLower())) return true; else return false; } else return false; } |
머 특별히 이해하기 어려운 소스는 없으므로 패스~
추신:
본 프로젝트에서 사용한 Person 클래스는 아래 링크에서 참조 하였음을 밝힙니다.
Implement a Firefox-like search in WPF applications using M-V-VM
(이거보다 훨씬 갠찬은게 나와야 할텐데…흠냐~ 어쨋거나 업데되면 새로 게시할랍니다~)
WpfApplication1.zip