Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Here is an attached property that hooks to the SelectionChanged event of the ListBox and populates a list of selected items to the ViewModel. You can simply change "ListBox" to "DataGrid".</p> <p><a href="http://marlongrech.wordpress.com/2009/06/02/sync-multi-select-listbox-with-viewmodel/" rel="nofollow noreferrer">http://marlongrech.wordpress.com/2009/06/02/sync-multi-select-listbox-with-viewmodel/</a></p> <p><strong>Edit:</strong> Adding source code for DataGrid version...</p> <pre><code>/// &lt;summary&gt; /// Attached property that stores the selected items of a DataGrid /// &lt;/summary&gt; public static class DataGridService { #region SelectedItems /// &lt;summary&gt; /// SelectedItems Attached Dependency Property /// &lt;/summary&gt; public static readonly DependencyProperty SelectedItemsProperty = DependencyProperty.RegisterAttached( "SelectedItems", typeof(IList), typeof(DataGridService), new FrameworkPropertyMetadata((IList)null, new PropertyChangedCallback(OnSelectedItemsChanged))); /// &lt;summary&gt; /// Gets the SelectedItems property. /// &lt;/summary&gt; /// &lt;param name="d"&gt;&lt;see cref="DependencyObject"/&gt; to get the property from&lt;/param&gt; /// &lt;returns&gt;The value of the SelectedItems property&lt;/returns&gt; public static IList GetSelectedItems(DependencyObject d) { return (IList)d.GetValue(SelectedItemsProperty); } /// &lt;summary&gt; /// Sets the SelectedItems property. /// &lt;/summary&gt; /// &lt;param name="d"&gt;&lt;see cref="DependencyObject"/&gt; to set the property on&lt;/param&gt; /// &lt;param name="value"&gt;value of the property&lt;/param&gt; public static void SetSelectedItems(DependencyObject d, IList value) { d.SetValue(SelectedItemsProperty, value); } /// &lt;summary&gt; /// Handles changes to the SelectedItems property. /// &lt;/summary&gt; /// &lt;param name="d"&gt;&lt;see cref="DependencyObject"/&gt; that fired the event&lt;/param&gt; /// &lt;param name="e"&gt;A &lt;see cref="DependencyPropertyChangedEventArgs"/&gt; that contains the event data.&lt;/param&gt; private static void OnSelectedItemsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var grid = (DataGrid)d; ReSetSelectedItems(grid); grid.SelectionChanged += delegate { ReSetSelectedItems(grid); }; } /// &lt;summary&gt; /// Sets the selected items collection for the specified &lt;see cref="DataGrid"/&gt; /// &lt;/summary&gt; /// &lt;param name="grid"&gt;&lt;see cref="DataGrid"/&gt; to use for setting the selected items&lt;/param&gt; private static void ReSetSelectedItems(DataGrid grid) { IList selectedItems = GetSelectedItems(grid); selectedItems.Clear(); if (grid.SelectedItems != null) { foreach (var item in grid.SelectedItems) { selectedItems.Add(item); } } } #endregion } </code></pre> <p>In the XAML:</p> <pre><code>&lt;tk:DataGrid ... local:DataGridService.SelectedItems="{Binding Path=MyCollection}" SelectionMode="Extended"&gt; </code></pre> <p>"MyCollection" should be an ObservableCollection in your ViewModel.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload