by Laurent Bugnion via Silverlight on 5/19/2010 5:17:17 AM
An interesting question from one of the MVVM Light users today:
Is there an MVVM-friendly way to get a DataGrid’s SelectedItems into the ViewModel?
The issue there is as old as the DataGrid (that’s not very old but still): SelectedItem (singular) is a DependencyProperty and can be databound to a property in the ViewModel. SelectedItems (plural) is not a DependencyProperty.
Thankfully the answer is very simple: Use EventToCommand to call a Command in the ViewModel, and pass the SelectedItems collection as parameter. For example, if the command in the ViewModel is declared as follows:
public RelayCommand<IList> SelectionChangedCommand { get; private set; }
SelectionChangedCommand = new RelayCommand<IList>( items => { if (items == null) { NumberOfItemsSelected = 0; return; } NumberOfItemsSelected = items.Count; });
Then the XAML markup becomes:
<sdk:DataGrid x:Name="MyDataGrid" ItemsSource="{Binding Items}"> <i:Interaction.Triggers> <i:EventTrigger EventName="SelectionChanged"> <cmd:EventToCommand Command="{Binding SelectionChangedCommand}" CommandParameter="{Binding SelectedItems, ElementName=MyDataGrid}" /> </i:EventTrigger> </i:Interaction.Triggers> </sdk:DataGrid>
I slapped a quick sample and published it here (VS2010, SL4 but the concept works in SL3 and WPF too).
Cheers!
Laurent
Original Post: Handling DataGrid.SelectedItems in an MVVM-friendly manner
The content of the postings is owned by the respective author. Silverlight Feeds is not responsible for the contents of the postings. This site is automatically generated and cannot be reviewed for abusive content. If you find abusive content on Silverlight Feeds, please contact us. Designated trademarks and brands are the property of their respective owners. All rights reserved.