I have developed a custom control for multiple selection in Rad Combobox. Now i want to show the selected items as comma separated string. Can i manipulate the display member of rad combo box at runtime?
<
Window.Resources
>
<
DataTemplate
x:Key
=
"ItemContDataTemplateKey"
>
<
Grid
x:Name
=
"radCmb"
Width
=
"210"
HorizontalAlignment
=
"Left"
>
<
Grid.ColumnDefinitions
>
<
ColumnDefinition
Width
=
"20"
></
ColumnDefinition
>
<
ColumnDefinition
Width
=
"*"
></
ColumnDefinition
>
</
Grid.ColumnDefinitions
>
<
CheckBox
x:Name
=
"chkSelct"
HorizontalAlignment
=
"Left"
DataContext
=
"{Binding}"
Grid.Column
=
"0"
Unchecked
=
"chkSelct_Unchecked"
Checked
=
"chkSelct_Checked"
></
CheckBox
>
<
TextBlock
x:Name
=
"txtDropDown"
Text
=
"{Binding FullName}"
Grid.Column
=
"1"
></
TextBlock
>
</
Grid
>
</
DataTemplate
>
</
Window.Resources
>
<
Telerik:RadComboBox
Name
=
"radCmbCompany"
HorizontalAlignment
=
"Center"
Height
=
"25"
Width
=
"250"
SelectedValuePath
=
"Id"
IsEditable
=
"True"
IsReadOnly
=
"True"
ItemTemplate
=
"{StaticResource ItemContDataTemplateKey}"
>
</
Telerik:RadComboBox
>
//CODE BEHIND
public string DisplayMember { get; set; }
public static readonly DependencyProperty SelectedItemsProperty =
DependencyProperty.Register("SelectedItems", typeof(ObservableCollection<
object
>), typeof(Window1),
new FrameworkPropertyMetadata(new ObservableCollection<
object
>()));
public ObservableCollection<
object
> SelectedItems
{
get { return (ObservableCollection<
object
>)base.GetValue(SelectedItemsProperty); }
set { base.SetValue(SelectedItemsProperty, value); }
}
public static readonly DependencyProperty SelectedTextProperty =
DependencyProperty.Register("SelectedText", typeof(string), typeof(Window1),
new FrameworkPropertyMetadata());
public string SelectedText
{
get { return (string)base.GetValue(SelectedTextProperty); }
set { base.SetValue(SelectedTextProperty, value); }
}
private void chkSelct_Checked(object sender, RoutedEventArgs e)
{
SetSelectedText(sender);
}
private void chkSelct_Unchecked(object sender, RoutedEventArgs e)
{
SetSelectedText(sender);
}
private void SetSelectedText(object sender)
{
CheckBox chkbx = sender as CheckBox;
if (chkbx != null && chkbx.IsChecked.Equals(true))
{
this.SelectedItems.Add(chkbx.DataContext);
string CurrentselectedText = Convert.ToString(chkbx.DataContext.GetType().GetProperty(this.DisplayMember).GetValue(chkbx.DataContext, null));
if (this.SelectedText != null && this.SelectedText.Length > 0)
{
this.SelectedText += "," + CurrentselectedText;
}
else
{
this.SelectedText = CurrentselectedText;
}
}
else if (chkbx != null && chkbx.IsChecked.Equals(false))
{
string CurrentselectedText = Convert.ToString(chkbx.DataContext.GetType().GetProperty(this.DisplayPath).GetValue(chkbx.DataContext, null));
if (this.SelectedText != null && this.SelectedText.Length > 0 && this.SelectedText.IndexOf(',') > 0)
{
if (this.SelectedText.IndexOf(CurrentselectedText) + CurrentselectedText.Length <
this.SelectedText.Length
&& this.SelectedText.Substring(this.SelectedText.IndexOf(CurrentselectedText) + CurrentselectedText.Length, 1) == ",")
{
this.SelectedText
= this.SelectedText.Remove(this.SelectedText.IndexOf(CurrentselectedText), CurrentselectedText.Length + 1);
}
else
{
this.SelectedText
= this.SelectedText.Remove(this.SelectedText.IndexOf(CurrentselectedText) + 1, CurrentselectedText.Length);
}
}
else if (this.SelectedText != null && this.SelectedText.Length > 0)
{
this.SelectedText = string.Empty;
}
}
}