This question is locked. New answers and comments are not allowed.
How to get/set SelectedItems via MVVM? How to bind Items collection?
My XAML code
<
telerikInput:RadListPicker
x:Name
=
"CountryPicker"
ItemsSource
=
"{Binding TitleCountries}"
Header
=
"Country"
SelectionMode
=
"Multiple"
SelectedItem
=
"{Binding SelectedCountries,Mode=TwoWay}"
OkButtonIconUri
=
"/Toolkit.Content/ApplicationBar.Check.png"
CancelButtonIconUri
=
"/Toolkit.Content/ApplicationBar.Cancel.png"
PopupHeader
=
""
>
and ViewModel
ObservableCollection<Country> _TitleCountries;
public
ObservableCollection<Country> TitleCountries
{
get
{
return
_TitleCountries;
}
}
ObservableCollection<Country> _SelectedCountries;
public
ObservableCollection<Country> SelectedCountries
{
get
{
return
_SelectedCountries;
}
set
{
_SelectedCountries = value;
RaisePropertyChanged(
"SelectedCountries"
);
}
}
I've tried implement the same solution as described there:
http://www.telerik.com/community/forums/silverlight/listbox/radlistbox-selecteditems-mvvm.aspx
but without any success, looks like only get is appear. :
<StackPanel Margin=
"0"
>
<telerikInput:RadListPicker
x:Name=
"CountryPicker"
ItemsSource=
"{Binding TitleCountries}"
Header=
"Country"
SelectionMode=
"Multiple"
SelectedItem=
"{Binding SelectedCountries,Mode=TwoWay}"
OkButtonIconUri=
"/Toolkit.Content/ApplicationBar.Check.png"
CancelButtonIconUri=
"/Toolkit.Content/ApplicationBar.Cancel.png"
PopupHeader=
""
>
<i:Interaction.Triggers>
<i:EventTrigger EventName=
"SelectionChanged"
>
<cmd:EventToCommand Command=
"{Binding MethodChangedCommand}"
CommandParameter=
"{Binding SelectedItems, ElementName=CountryPicker}"
/>
</i:EventTrigger>
</i:Interaction.Triggers>
public
class
RadListPickerSelectedItemsBehavior : Behavior<RadListPicker>
{
private
RadListPicker ListPicker
{
get
{
return
AssociatedObject;
}
}
public
INotifyCollectionChanged SelectedItems
{
get
{
return
(INotifyCollectionChanged)GetValue(SelectedItemsProperty); }
set
{
SetValue(SelectedItemsProperty, value);
}
}
public
static
readonly
DependencyProperty SelectedItemsProperty =
DependencyProperty.Register(
"SelectedItems"
,
typeof
(INotifyCollectionChanged),
typeof
(RadListPickerSelectedItemsBehavior),
new
PropertyMetadata(OnSelectedItemsPropertyChanged));
private
static
void
OnSelectedItemsPropertyChanged(DependencyObject target, DependencyPropertyChangedEventArgs args)
{
var collection = args.NewValue
as
INotifyCollectionChanged;
if
(collection !=
null
)
{
collection.CollectionChanged += ((RadListPickerSelectedItemsBehavior)target).ContextSelectedItemsCollectionChanged;
}
}
protected
override
void
OnAttached()
{
base
.OnAttached();
ListPicker.SelectionChanged += ListBoxOnSelectionChanged;
}
private
void
ContextSelectedItemsCollectionChanged(
object
sender, NotifyCollectionChangedEventArgs e)
{
UnsubscribeFromEvents();
Transfer(SelectedItems
as
IList, ListPicker.SelectedItems);
SubscribeToEvents();
}
private
void
ListBoxOnSelectionChanged(
object
sender, SelectionChangedEventArgs selectionChangedEventArgs)
{
UnsubscribeFromEvents();
Transfer(ListPicker.SelectedItems, SelectedItems
as
IList);
SubscribeToEvents();
}
private
void
SubscribeToEvents()
{
ListPicker.SelectionChanged += ListBoxOnSelectionChanged;
if
(SelectedItems !=
null
)
{
SelectedItems.CollectionChanged += ContextSelectedItemsCollectionChanged;
}
}
private
void
UnsubscribeFromEvents()
{
ListPicker.SelectionChanged -= ListBoxOnSelectionChanged;
if
(SelectedItems !=
null
)
{
SelectedItems.CollectionChanged -= ContextSelectedItemsCollectionChanged;
}
}
public
static
void
Transfer(IList source, IList target)
{
if
(source ==
null
|| target ==
null
)
return
;
target.Clear();
foreach
(var o
in
source)
{
target.Add(o);
}
}
}
could anybody say how to GET/SET selected items of the RadListPicker using MVVM pattern?