Friday, August 12, 2016

Multi-item Selection WPF ListBox using Attached Property

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/


.NET , WPF

0 comments :

Post a Comment

 

© 2011 GIS and Remote Sensing Tools, Tips and more .. ToS | Privacy Policy | Sitemap

About Me