The attached property class looks like -
ListBoxHelper.cs
1: public static class ListBoxHelper
2: {
3: public static readonly DependencyProperty SelectedItemsProperty =
4: DependencyProperty.RegisterAttached("SelectedItems",
5: typeof(IList),
6: typeof(ListBoxHelper),
7: new PropertyMetadata(default(List<string>),
8: OnSelectedItemsChanged));
9:
10: public static IList GetSelectedItems(DependencyObject d)
11: {
12: return (IList)d.GetValue(SelectedItemsProperty);
13: }
14:
15: public static void SetSelectedItems(DependencyObject d, IList value)
16: {
17: d.SetValue(SelectedItemsProperty,value);
18: }
19:
20: private static void OnSelectedItemsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
21: {
22: var listBox = (ListBox)d;
23: ReSetSelectedItems(listBox);
24: listBox.SelectionChanged += delegate
25: {
26: ReSetSelectedItems(listBox);
27: };
28: }
29:
30: private static void ReSetSelectedItems(ListBox listBox)
31: {
32: IList selectedItems = GetSelectedItems(listBox);
33: selectedItems.Clear();
34: if (listBox.SelectedItems != null)
35: {
36: foreach (var item in listBox.SelectedItems)
37: selectedItems.Add(item.ToString());
38: }
39: }
40: }
Part of ViewModel.cs
1: private ObservableCollection<string> _listSelectedStates = new ObservableCollection<string>();
2:
3: public ObservableCollection<string> SelectedStates
4: {
5: get { return _listSelectedStates; }
6: set { _listSelectedStates = value; }
7: }
Part of View.xaml
1: <ListBox Grid.Row="4" Grid.Column="2" Grid.ColumnSpan="2" Name="listSelectedStates" SelectionMode="Extended" w:ListBoxHelper.SelectedItems="{Binding SelectedStates}" IsEnabled="True">
2: <ListBoxItem Content="UT" />
3: <ListBoxItem Content="TX" />
4: <ListBoxItem Content="WA" />
5: </ListBox>
Ref:
https://marlongrech.wordpress.com/2009/06/02/sync-multi-select-listbox-with-viewmodel/

0 comments :
Post a Comment