I have a ListView of items, and I want to run some code every time the user selects or deselects an item without resorting to event handlers in the control’s codebehind – everything is being done in the view the control has its datacontext set to.
When the ListView’s selection mode is “Single” I can simply bind “SelectedItem” to a property in my view, and watch for when that property’s change event. If selection mode is “Multiple” however, the behaviour is completely unreliable. Sometimes the last item clicked changes the SelectedItem, and sometimes it doesn’t. This DependencyProperty appears to be complete trash when the selection mode isn’t single. How else can I use a binding to track changes to the ListView’s SelectedItems collection?
Note that I don’t use Expression blend so I won’t be using Interaction.Triggers or similar library solutions.
<ListView ItemsSource="{Binding Path=Zones}"
SelectionMode="Multiple"
SelectedItem="{Binding SelectedZone}">
The only solution was to wrap the ItemsTemplate for the list in a control that can be toggled and has a command binding (like a button) and then bind the viewmodel to that command binding. It’s a huge pain and requires hacking around with the HitTestVisibility and binding the button’s state to the item’s selected state, but it works in the end.