views:

27

answers:

1

So I have an ObservableCollection of items called "Class1" and Class1 has a property named "ID".

I use a datagrid from the WPFToolkit and bind to this collection. Within the datagrid is a combobox column and I bind it's ItemsSource to the ID property of the class.

At this point, all is good and everything populates as it should. What I want to do is modify the ObservableCollection to reflect the value selected in the ComboBox.

I have a ValueConverter bound to the SelectedItemBinding on the ComboBox as follows:

SelectedItemBinding="{Binding Path=ID, Converter={StaticResource IDConverter}}

What is the best (i.e: WPF approved method) of modifying the collection? When the IDConverter ConvertBack() method is called, I get the appropriate Class1 instance, but I can't access the Observable collection from within the ValueConverter and I also don't have access to the SelectedIndex value from the Datagrid.

I could create a class as a static resource with a pointer to my collection and pass that as a ConverterParameter, but that seems sort of hokey and I'm assuming there must be some slicker way of doing this with databinding.

A: 

For the record, a simple solution is to create a local resource with a reference to the collection you wish to modify as a dependency property. You can then pass this as a ConverterParameter and have access to it in the ConvertBack() interface method.

A caveat: You will most likely encounter a DeferRefresh exception when you make changes to the collection and then you lose focus. An excellent fix is found here: http://social.msdn.microsoft.com/Forums/en/wpf/thread/187b2b8f-d403-4bf3-97ad-7f93b4385cdf