ایجاد Combobox با قابلیت انتخاب چندگانه درWPF

پنجشنبه 9 اردیبهشت 1395

در این مقاله قصد داریم یک Combobox را با قابلیت انتخاب چندگانه عناصر و امکان جستجو در آن در محیط WPF پیاده سازی کرده و عناصر انتخاب شده را در Listbox به نمایش بگذاریم.

ایجاد  Combobox با قابلیت انتخاب چندگانه درWPF

اگر بخواهیم به کاربر امکان انتخاب چند مقدار را از یک لیست بدهیم ، این لیست باید درون یک grid پر شود. نمیخواهیم از  Listbox یا ابزار دیگری استفاده کنیم. بجای آن میخواهیم از یک Combobox با قابلیت انتخاب چندگانه استفاده کنیم. در اینجا چنین  Combobox را همراه با امکان جستجو بر روی عناصر پیاده سازی خواهیم کرد. 

در شکل زیر یک  Listbox  را مشاهده میکنید که برای نمایش عناصر انتخاب شده استفاده می شود. 

در نمای زیر میبینید که چگونه امکان جستجوی آن کار میکند. تاثیری بر روی عناصر ندارد اما برای نمایش آنها را مدیریت میکند. هنگامی که متن نوشته شده پاک شود، همه عناصر انتخاب شده به لیست باز خواهند گشت. 

 

این مقاله را به دو بخش تقسیم خواهیم  کرد: یکی بخش طراحی  یا  XML  ، و یکی بخش  #C 

برای بخش طراحی از دو کنترل  Dropdown برای انتخاب ها و  Listbox برای نمایش عناصر انتخاب شده استفاده خواهیم کرد. 

<ComboBox Height="30" TextBoxBase.TextChanged="ddlCountry_TextChanged" HorizontalAlignment="Left" VerticalAlignment="Top" Name="ddlCountry" IsEditable="True" IsTextSearchEnabled="True" StaysOpenOnEdit="True" Width="165" SelectionChanged="ddlCountry_SelectionChanged" Margin="78,139,0,0">  
    <ComboBox.ItemTemplate>  
        <DataTemplate>  
            <CheckBox Name="chkCountry" Width="220" Checked="AllCheckbocx_CheckedAndUnchecked" Unchecked="AllCheckbocx_CheckedAndUnchecked" Content="{Binding Country_Name}" IsChecked="{Binding Check_Status}" CommandParameter="{Binding Country_ID}">  
            </CheckBox>  
        </DataTemplate>  
    </ComboBox.ItemTemplate>  
</ComboBox>  
  
<ListBox Name="testListbox" HorizontalAlignment="Left" Height="161" Margin="370,80,0,0" VerticalAlignment="Top" Width="100" /> 

 

کلاسی با نام  DDL_Country برای اتصال با  Combobox  ایجاد کردیم که سه ویژگی دارد. 

public class DDL_Country  
{  
    public int Country_ID   
  {  
        get;  
        set;  
    }  
    public string Country_Name   
    {  
        get;  
        set;  
    }  
    public Boolean Check_Status   
    {  
        get;  
        set;  
    }  
}  

برای اتصال لیست عناصر در  Dropdown متدی را به صورت زیر ایجاد کردیم. 

private void AddElementsInList()
        {
            // 1 element
            DDL_Country obj = new DDL_Country();
            obj.Country_ID = 10;
            obj.Country_Name = "ایران";
            objCountryList.Add(obj);
            obj = new DDL_Country();
            obj.Country_ID = 11;
            obj.Country_Name = "اتریش";
            objCountryList.Add(obj);
            obj = new DDL_Country();
            obj.Country_ID = 12;
            obj.Country_Name = "ترکیه";
            objCountryList.Add(obj);
            obj = new DDL_Country();
            obj.Country_ID = 13;
            obj.Country_Name = "مجارستان";
            objCountryList.Add(obj);
            obj = new DDL_Country();
            obj.Country_ID = 14;
            obj.Country_Name = "آلمان";
            objCountryList.Add(obj);
        }

کد تکمیل شده بخش  #C به صورت زیر است . 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication3
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        List<DDL_Country> objCountryList;

        public MainWindow()
        {
            InitializeComponent();
            objCountryList = new List<DDL_Country>();
            AddElementsInList();
            BindCountryDropDown();
        }


        private void BindCountryDropDown()
        {
            ddlCountry.ItemsSource = objCountryList;
        }
        private void ddlCountry_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {

        }

        private void ddlCountry_TextChanged(object sender, TextChangedEventArgs e)
        {
            ddlCountry.ItemsSource = objCountryList.Where(x => x.Country_Name.StartsWith(ddlCountry.Text.Trim()));
        }

        private void AllCheckbocx_CheckedAndUnchecked(object sender, RoutedEventArgs e)
        {
            BindListBOX();
        }

        private void BindListBOX()
        {
            testListbox.Items.Clear();
            foreach (var country in objCountryList)
            {
                if (country.Check_Status == true)
                {
                    testListbox.Items.Add(country.Country_Name);
                }
            }
        }

        private void AddElementsInList()
        {
            // 1 element
            DDL_Country obj = new DDL_Country();
            obj.Country_ID = 10;
            obj.Country_Name = "ایران";
            objCountryList.Add(obj);
            obj = new DDL_Country();
            obj.Country_ID = 11;
            obj.Country_Name = "اتریش";
            objCountryList.Add(obj);
            obj = new DDL_Country();
            obj.Country_ID = 12;
            obj.Country_Name = "ترکیه";
            objCountryList.Add(obj);
            obj = new DDL_Country();
            obj.Country_ID = 13;
            obj.Country_Name = "مجارستان";
            objCountryList.Add(obj);
            obj = new DDL_Country();
            obj.Country_ID = 14;
            obj.Country_Name = "آلمان";
            objCountryList.Add(obj);
        }
    }

    public class DDL_Country
    {
        public int Country_ID { get; set; }
        public string Country_Name { get; set; }
        public Boolean Check_Status { get; set; }
    }
}

 

براحتی توانستیم  یک  Combobox  را با قابلیت انتخاب چندگانه عناصر آن ایجاد کنیم. 

همانطور که در بالا نشان داده شد ، خروجی به صورت زیر است. 

فایل های ضمیمه

سجاد باقرزاده

نویسنده 54 مقاله در برنامه نویسان
  • WPF
  • 4k بازدید
  • 3 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید