I use the RadComboBox from Telerik in a WPF project.
My Problem is that the selected text is not updated when the selected item changes its value. So when the ViewModel changes the `Name` property of the `SelectedItem`, I can not see this in the RadComboBox.
Note: The `SelectedItem` implements `INotifyPropertyChanged` and is calling the event.
Full source code:
public
class
MainViewModel : INotifyPropertyChanged
{
private
readonly
List<Item> _items =
new
List<Item>();
private
Item _selectedItem;
public
MainViewModel()
{
_items.Add(
new
Item { Name =
"Eg Zomh JywS"
});
_items.Add(
new
Item { Name =
"Ua Qvp Lavwz"
});
_items.Add(
new
Item { Name =
"Nee Lzx Rdaq"
});
_items.Add(
new
Item { Name =
"Um Ztgi Yvsg"
});
_items.Add(
new
Item { Name =
"tma Oppt fzd"
});
_items.Add(
new
Item { Name =
"Du Zofcy Fbs"
});
_items.Add(
new
Item { Name =
"bc Ey Ppvvcp"
});
_items.Add(
new
Item { Name =
"Mv RSIZtf WE"
});
_items.Add(
new
Item { Name =
"BFb YYZ PHwC"
});
_items.Add(
new
Item { Name =
"YSW LQ DXxHu"
});
}
public
event
PropertyChangedEventHandler PropertyChanged;
public
IEnumerable<Item> Items {
get
{
return
_items; } }
public
Item SelectedItem
{
get
{
return
_selectedItem; }
set
{
_selectedItem = value;
OnPropertyChanged(
"SelectedItem"
);
OnPropertyChanged(
"SelectedItemName"
);
}
}
public
string
SelectedItemName
{
get
{
return
_selectedItem !=
null
? _selectedItem.Name :
null
; }
set
{
if
(_selectedItem !=
null
)
{
_selectedItem.Name = value;
OnPropertyChanged(
"SelectedItemName"
);
}
}
}
protected
virtual
void
OnPropertyChanged(
string
propertyName)
{
var handler = PropertyChanged;
if
(handler !=
null
)
{
handler(
this
,
new
PropertyChangedEventArgs(propertyName));
}
}
}
public
class
Item : INotifyPropertyChanged
{
private
string
_name;
public
event
PropertyChangedEventHandler PropertyChanged;
public
string
Name
{
get
{
return
_name; }
set
{
_name = value;
OnPropertyChanged(
"Name"
);
}
}
protected
virtual
void
OnPropertyChanged(
string
propertyName)
{
var handler = PropertyChanged;
if
(handler !=
null
)
{
handler(
this
,
new
PropertyChangedEventArgs(propertyName));
}
}
}
<
Window
x:Class
=
"TelerikRadComboBoxProblem.MainWindow"
xmlns:telerik
=
"http://schemas.telerik.com/2008/xaml/presentation"
Title
=
"MainWindow"
Height
=
"150"
Width
=
"300"
>
<
Grid
>
<
Grid.RowDefinitions
>
<
RowDefinition
Height
=
"Auto"
/>
<
RowDefinition
Height
=
"Auto"
/>
<
RowDefinition
Height
=
"*"
/>
</
Grid.RowDefinitions
>
<
Grid.ColumnDefinitions
>
<
ColumnDefinition
Width
=
"Auto"
/>
<
ColumnDefinition
Width
=
"*"
/>
</
Grid.ColumnDefinitions
>
<
TextBlock
Text
=
"Search: "
VerticalAlignment
=
"Center"
/>
<
telerik:RadComboBox
Grid.Row
=
"0"
Grid.Column
=
"1"
ItemsSource
=
"{Binding Items, Mode=OneWay}"
SelectedItem
=
"{Binding SelectedItem, Mode=TwoWay}"
StaysOpenOnEdit
=
"True"
DisplayMemberPath
=
"Name"
CanAutocompleteSelectItems
=
"False"
IsEditable
=
"True"
IsReadOnly
=
"False"
OpenDropDownOnFocus
=
"True"
IsFilteringEnabled
=
"True"
TextSearchMode
=
"Contains"
>
</
telerik:RadComboBox
>
<
TextBlock
Grid.Row
=
"1"
Grid.Column
=
"0"
Text
=
"Rename: "
VerticalAlignment
=
"Center"
/>
<
TextBox
Grid.Row
=
"1"
Grid.Column
=
"1"
Text
=
"{Binding SelectedItemName, Mode=TwoWay}"
/>
</
Grid
>
</
Window
>
public
partial
class
MainWindow
{
public
MainWindow()
{
InitializeComponent();
DataContext =
new
MainViewModel();
}
}