ایجاد Combobox با قابلیت انتخاب چندگانه درWPF
پنجشنبه 9 اردیبهشت 1395در این مقاله قصد داریم یک Combobox را با قابلیت انتخاب چندگانه عناصر و امکان جستجو در آن در محیط WPF پیاده سازی کرده و عناصر انتخاب شده را در Listbox به نمایش بگذاریم.
اگر بخواهیم به کاربر امکان انتخاب چند مقدار را از یک لیست بدهیم ، این لیست باید درون یک 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 را با قابلیت انتخاب چندگانه عناصر آن ایجاد کنیم.
همانطور که در بالا نشان داده شد ، خروجی به صورت زیر است.
- WPF
- 4k بازدید
- 3 تشکر