I have researched this and am stumped: I have a WPF DataGrid, and using an MVVM model. I want to, under certain circumstances, prevent the ability to change a row in the DataGrid. I have researched this and have tried techniques like the one found here.
In practice, this works, however there is an undesirable 'flicker' (it selects the clicked row for a moment then goes back to the previous selection), while this is a close solution I wish there was a more elegant way such as preventing the row change at all in the first place.
I am surprised there is not a SelectionChanging or BeforeSelectionChanged so I could cancel the event from firing; and forcibly preventing the index change in my view model does not seem to make any difference.
How can I do this?
Thank you.
what happens if you take the previewkeydown
and previewmousedown
events and just call e.Handled=true
under your certain circumstance?
Edit:
to satisfy the mvvm style:
you can create a Behavior
with a DependencyProperty
you can bind your circumstance to.
in this behavior you can handle the events and maybe some other stuff, like does the user click on a datarow or header...
DispatcherPriority has been set to ContextIdle. This makes you have flickering, since your SelectedItem is set twice (and it's been rendered twice). Just set priority to Normal, and you'll have flickering no more.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With