سؤال

أقوم بتنفيذ عامل تصفية TextBox في قائمة بناء على مثال جوش سميث في http://josmithithonwpf.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 لديه شاشة حاشية مختلفة بعد التحديث. هل جميع وجهات النظر التي تم إنشاؤها عند تحديث البيانات؟ هل هذا يعني أنني يجب أن أعد المرشح مرة أخرى كلما استدعاء ObjectDATAProvider.Refresh ()؟ هل هناك بعض الطرق الأكثر ذكاء لتثبيت هذا المرشح الذي لن يتطلب مجالسة الأطفال؟

هل كانت مفيدة؟

المحلول

أنت على حق في القول بأن CollectionViewSource.View سيتم استبداله عند تعيين CollectionViewSource.source.

الحل هو استخدام CollectionViewSource.filter. الحدث بدلا من Collectionview.filter. خاصية. هذا سوف تلتصق عند رحلتك يذهب بعيدا.

يمكنك القيام بذلك مع الحد الأدنى من التغييرات في جوش سميث 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();
        };
    }
}

يصبح رمز Hookup الخاص بك ثم:

var pickerView = FindResource("sortedRulesView") as CollectionViewSource;
new TextSearchFilter(pickerView, SearchTextBox);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top