TECHNOLOGIES
FORUMS
JOBS
BOOKS
EVENTS
INTERVIEWS
Live
MORE
LEARN
Training
CAREER
MEMBERS
VIDEOS
NEWS
BLOGS
Sign Up
Login
No unread comment.
View All Comments
No unread message.
View All Messages
No unread notification.
View All Notifications
C# Corner
Post
An Article
A Blog
A News
A Video
An EBook
An Interview Question
Ask Question
Multi Select Combobox in Silverlight With C#
Piyush Pansuriya
Sep 05
2014
Code
4.5
k
0
0
facebook
twitter
linkedIn
Reddit
WhatsApp
Email
Bookmark
expand
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Net;
using
System.Windows;
using
System.Windows.Controls;
using
System.Windows.Documents;
using
System.Windows.Input;
using
System.Windows.Media;
using
System.Windows.Media.Animation;
using
System.Windows.Shapes;
using
Banthia_Mgt_System.Assets.Wrapper_Class;
using
System.Collections.ObjectModel;
using
Banthia_Mgt_System.Classes;
using
Banthia_Mgt_System.Assets.Classes;
namespace
Banthia_Mgt_System.Assets.Multiselect_Combo
{
public
partial
class
UC_Multi_Dept_Combo : UserControl
{
List<CLS_Multi_Dept_Checked_WrapperBE> _Coll_Wrapper_BE;
private
List<CLS_Multi_Dept_Checked_WrapperBE> Coll_Wrapper_BE
{
get
{
return
_Coll_Wrapper_BE;
}
set
{
_Coll_Wrapper_BE = value;
foreach
(var item
in
Coll_Wrapper_BE)
item.PropertyChanged +=
new
System.ComponentModel.PropertyChangedEventHandler(item_PropertyChanged);
cmbDepartment.ItemsSource = value;
if
(cmbDepartment.ItemsSource !=
null
)
SetString();
}
}
public
UC_Multi_Dept_Combo()
{
InitializeComponent();
cmbDepartment.SelectionChanged +=
new
SelectionChangedEventHandler(cmbDepartment_SelectionChanged);
cmbDepartment.DropDownOpened +=
new
EventHandler(cmbDepartment_DropDownOpened);
}
void
cmbDepartment_DropDownOpened(
object
sender, EventArgs e)
{
if
(Coll_Wrapper_BE ==
null
)
Coll_Wrapper_BE = CLS_Multi_Dept_Checked_Wrapper.Get_Wrapper_Coll(
new
List<
int
>());
}
public
static
readonly
DependencyProperty Str_Department_IdsProperty = DependencyProperty.Register(
"Str_Department_Ids"
,
typeof
(
string
),
typeof
(UC_Multi_Dept_Combo),
new
PropertyMetadata(
null
, OnPropertyChangedCallback));
public
string
Str_Department_Ids
{
get
{
return
(
string
)GetValue(Str_Department_IdsProperty);
}
set
{
SetValue(Str_Department_IdsProperty, value);
}
}
private
static
void
OnPropertyChangedCallback(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
var obj = (UC_Multi_Dept_Combo)o;
obj.Coll_Wrapper_BE = CLS_Multi_Dept_Checked_Wrapper.Get_Wrapper_Coll(Globle_Function.Get_Coll_From_Str_CSV(obj.Str_Department_Ids));
}
void
item_PropertyChanged(
object
sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if
(e.PropertyName ==
"IS_CHECKED"
)
{
SetString();
//Department_id_String();
}
}
public
void
SetString()
{
string
str_Department_Name =
""
;
string
str_Department_Ids =
""
;
foreach
(var item
in
Coll_Wrapper_BE)
{
if
(item.IS_CHECKED)
{
if
(str_Department_Name !=
""
) str_Department_Name +=
", "
;
if
(str_Department_Ids !=
""
) str_Department_Ids +=
", "
;
str_Department_Name += item.DEPT_MST.DEPARTMENT_NAME;
str_Department_Ids += item.DEPT_MST.DEPARTMENT_ID.ToString();
}
}
SetValue(Str_Department_IdsProperty, str_Department_Ids);
tbDepartment.Text = str_Department_Name;
var Tool =
new
ToolTip() { Content = str_Department_Name };
ToolTipService.SetToolTip(tbDepartment, Tool);
ToolTipService.SetToolTip(cmbDepartment, Tool);
}
void
cmbDepartment_SelectionChanged(
object
sender, SelectionChangedEventArgs e)
{
cmbDepartment.SelectedItem =
null
;
}
private
void
tbDepartment_MouseLeftButtonDown(
object
sender, MouseButtonEventArgs e)
{
cmbDepartment.IsDropDownOpen =
true
;
}
}
}
XAML Code
<
UserControl
x:Class
=
"Banthia_Mgt_System.Assets.Multiselect_Combo.UC_Multi_Dept_Combo"
xmlns
=
"http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x
=
"http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d
=
"http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc
=
"http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable
=
"d"
d:DesignWidth
=
"300"
>
<
Grid
x:Name
=
"LayoutRoot"
Background
=
"White"
>
<
ComboBox
Name
=
"cmbDepartment"
Height
=
"23"
HorizontalAlignment
=
"Stretch"
>
<
ComboBox.ItemTemplate
>
<
DataTemplate
>
<
CheckBox
Content
=
"{Binding DEPT_MST.DEPARTMENT_NAME}"
IsChecked
=
"{Binding IS_CHECKED,Mode=TwoWay}"
/>
</
DataTemplate
>
</
ComboBox.ItemTemplate
>
</
ComboBox
>
<
TextBlock
x:Name
=
"tbDepartment"
TextTrimming
=
"WordEllipsis"
MouseLeftButtonDown
=
"tbDepartment_MouseLeftButtonDown"
HorizontalAlignment
=
"Stretch"
VerticalAlignment
=
"Center"
MinHeight
=
"15"
Text
=
""
Margin
=
"5,0,20,0"
/>
</
Grid
>
</
UserControl
>
Wrapper Class
using
System;
using
System.Linq;
using
System.Net;
using
System.Windows;
using
System.Windows.Controls;
using
System.Windows.Documents;
using
System.Windows.Ink;
using
System.Windows.Input;
using
System.Windows.Media;
using
System.Windows.Media.Animation;
using
System.Windows.Shapes;
using
Banthia_Mgt_System.ServiceReference1;
using
System.Collections.Generic;
using
System.Collections.ObjectModel;
using
Banthia_Mgt_System.Classes;
using
System.ComponentModel;
namespace
Banthia_Mgt_System.Assets.Wrapper_Class
{
public
class
CLS_Multi_Dept_Checked_WrapperBE : INotifyPropertyChanged
{
private
bool
_IS_CHECKED;
public
bool
IS_CHECKED
{
get
{
return
_IS_CHECKED; }
set
{
_IS_CHECKED = value;
OnPropertyChanged(
"IS_CHECKED"
);
}
}
public
DEPARTMENT_MASTER DEPT_MST {
get
;
set
; }
#region INotifyPropertyChanged Members
public
event
PropertyChangedEventHandler PropertyChanged;
private
void
OnPropertyChanged(
string
propertyName)
{
if
(
this
.PropertyChanged !=
null
)
{
this
.PropertyChanged(
this
,
new
PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
public
static
class
CLS_Multi_Dept_Checked_Wrapper
{
public
static
List<CLS_Multi_Dept_Checked_WrapperBE> Get_Wrapper_Coll(List<
int
> Coll_Dept_ID)
{
var CollBE =
new
List<CLS_Multi_Dept_Checked_WrapperBE>();
foreach
(var item
in
GlobalClass.GColl_DeptMaster)
{
var obj =
new
CLS_Multi_Dept_Checked_WrapperBE()
{
IS_CHECKED = (Coll_Dept_ID.Where(ar => ar == item.DEPARTMENT_ID).Count() > 0),
DEPT_MST = item
};
CollBE.Add(obj);
}
return
CollBE;
}
public
static
List<
int
> Get_Object_BE_Coll(List<CLS_Multi_Dept_Checked_WrapperBE> Coll)
{
List<
int
> NewColl =
new
List<
int
>();
if
(Coll !=
null
)
NewColl =
new
List<
int
>(Coll.Where(ar => ar.IS_CHECKED ==
true
).Select(ar => ar.DEPT_MST.DEPARTMENT_ID));
return
NewColl;
}
}
}
Silverlight
Combobox in Silverlight