ObjectDataprovider를 상쾌하게 할 때 손실된다
-
23-08-2019 - |
문제
Josh Smith의 예제를 기반으로 목록에 텍스트 상자 필터를 구현하고 있습니다. http://joshsmithonwpf.wordpress.com/2007/06/12/searching-for-items-in-a-listbox. 기본적으로 검색 상자의 텍스트를 확인하는 대의원에게 필터를 설정합니다. 필터를 연결합니다.
var pickerView = FindResource("sortedRulesView") as CollectionViewSource;
new TextSearchFilter(pickerView.View, SearchTextBox);
나중에 ObjectDataprovider를 새로 고치면 필터가 손실됩니다. Pickerview.view는 새로 고침 후 해시 코드가 다른 것을 알았습니다. 데이터가 새로 고침 될 때 모든 견해가 재현됩니까? 객체 dataprovider.refresh ()를 호출 할 때마다 필터를 다시 재개해야한다는 의미입니까? 베이비 시팅이 필요하지 않은이 필터를 설치하는 더 똑똑한 방법이 있습니까?
해결책
CollectionViewSource.source가 설정되면 CollectionViewSource.view가 대체 될 것이라고 말하는 것이 맞습니다.
해결책은 CollectionViewSource.Filter 대신 이벤트 CollectionView.Filter 재산. 이것은 당신의 견해가 사라질 때 주위에 붙어 있습니다.
Josh Smith의 최소한의 변경 으로이 작업을 수행 할 수 있습니다. TextSearchFilter 수업:
public class TextSearchFilter
{
public TextSearchFilter(
CollectionViewSource filteredView,
TextBox textBox )
{
string filterText = "";
filteredView.Filter += delegate( object obj, FilterEventArgs e )
{
if( String.IsNullOrEmpty( filterText ) )
e.Accepted = true;
string str = e.Item as string;
if( String.IsNullOrEmpty( str ) )
e.Accepted = false;
int index = str.IndexOf(
filterText,
0,
StringComparison.InvariantCultureIgnoreCase );
e.Accepted = index > -1;
};
textBox.TextChanged += delegate
{
filterText = textBox.Text;
filteredView.View.Refresh();
};
}
}
그런 다음 연결 코드가됩니다.
var pickerView = FindResource("sortedRulesView") as CollectionViewSource;
new TextSearchFilter(pickerView, SearchTextBox);
제휴하지 않습니다 StackOverflow