Thursday, March 31, 2011

TwoWay Manual Binding Implementation for ListBox.SelectedItems?

Hello,

I've been trying to see if there is an easy/clever way to implement binding to ListBox.SelectedItems. If you have tried yourself, you will know, that markup binding using BindingExtension will not work - the property doesn't support it. So you are left with wiring up a handler for SelectionChanged and trying that route. The closest I've gotten is this post:

http://alexshed.spaces.live.com/blog/cns!71C72270309CE838!149.entry

Which implements all the necessary C# in a handy attached property. But it implements the "binding" as a One-Way, Target to Source. I'd like Two-Way binding.

Any ideas?

From stackoverflow
  • I've found an elegant solution, and I've just found time to write a blog post about it.

    What I did was to create an attached property, SynchronizedSelectedItems that you can set on the ListBox (or DataGrid in fact). You databind this to a collection, and then, with a bit of magic, the SelectedItems property on the ListBox and your collection are kept in sync. You can download all the code from my blog post.

    The "magic" is a class which listens out for CollectionChanged events in either collection, and propagates the changes to the other.

    Echilon : Thanks, that really helped.
    headsling : just great - really good stuff

0 comments:

Post a Comment