CSCIENCE

CSCIENCE

ترکیب Linq و Bind در WPF برای ساختن Live Search

دوشنبه, ۱۸ شهریور ۱۳۹۲، ۱۱:۳۷ ب.ظ

حتما تابه‌حال برنامه‌های زیادی رو دیدید که وقتی عبارتی رو برای جستجو وارد می‌کنید، در همون لحظه همزمان با تایپ شما، نتایج ممکن رو نشون می‌ده. تو این پست قصد دارم با استفاده از امکانات Binding و Linq در #C و WPF این کار رو آموزش بدم.


گام اول: ایجاد TextBox و ListBox

در ابتدا لازمه که برای گرفتن ورودی از کاربر و نمایش نتایج جستجو، از یک عدد TextBox به همراه ListBox استفاده کنیم. نام TextBox را textbox قرار دهید.


گام دوم: تعیین منبع داده

با توجه به اینکه می‌خواهیم از این منبع برای ItemsSource یک ListBox استفاده کنیم، لازم است که جنس آن یک IEnumerable باشد. من در این مثال ابتدا یک کلاس Static تعریف کرده‌ام و سپس در آن یک لیست Static از چند رشته Url ساخته‌ام


static class MyData
    {
        public static List<string> urls = new List<string>
        {
            "cscience.blog.ir",
            "cscience.mihanblog.ir",
            "google.com",
            "bing.com",
            "microsoft.com",
            "bayan.ir",
            "yahoo.com",
            "outlook.com"
        };
    }


گام سوم: نوشتن مبدل رشته به لیست

برای Binding مرحله بعد لازم است که یک مبدل یکطرفه با قابلیت تبدیل رشته (عبارت مورد جستجو) به نتیجه‌ی جستجو نوشته شود


class StringToLinqConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            string temp = value as string;
            return MyData.urls.Where(url => url.Contains(temp.Trim())).ToList();
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }


گام چهارم: Bind کردن ItemSource

در نهایت کافیست ItemSource مربوط به ListBox را به مقدار Text کنترل TextBox با استفاده از مبدل مرحله قبل Bind کنیم.


<Window.Resources>
        <local:StringToLinqConverter x:Key="StringToLinqConverter"/>
</Window.Resources>

<ListBox ItemsSource="{Binding Text, Converter={StaticResource StringToLinqConverter}, ElementName=textBox}"/>

اکنون با تایپ کردن عبارت مورد نظر برای جستجو در TextBox تمامی نتایج ممکن همزمان با تایپ حروف نمایش داده می‌شوند.
موافقین ۰ مخالفین ۰ ۹۲/۰۶/۱۸
cscience

سیشارپ

C#

WPF

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی