WPF pass parent binding object to the converter
Asked Answered
A

1

27

I have ItemsControl that is bound to collection of type Student. Inside the ItemTemplate I have a TextBox that uses IValueConverter to do some custom calculations and logic. I want to pass the actual Student object to the value converter, instead a property of it. How can I do that? Here's a sample of my code.

 <ItemsControl ItemsSource="{Binding StudentList}">
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Name}" />
                                    <TextBlock Text="{Binding ????, Converter={StaticResource MyConverter}}" />
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
 </ItemsControl>

In the code I have this

public class MyValueConverter : IValueConverter
{
      public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            // I want 'value' to be of type Student.
            return null;
        }
} 
Arp answered 2/12, 2010 at 12:41 Comment(0)
A
42

You can just leave out the path. That way you get at the actual object bound to.

<TextBlock Text="{Binding Converter={StaticResource MyConverter}}"/>

or if you want to be explicit about it:

<TextBlock Text="{Binding Path=., Converter={StaticResource MyConverter}}"/>
Abhorrent answered 2/12, 2010 at 12:44 Comment(4)
Thank you, I'll go and embarrass myself now.Arp
Well it's not immediately obvious. You could mark this as answer if it helped. :) By the way, by using {Binding Path=.} you get the same result.Abhorrent
@TomislavMarkovski I hope you have recovered from your embarrassment. It isn't immediately obvious and it's difficult trying to sift through all the information about binding to properties.Magocsi
Can I use the same for the converter parameter?Bilateral

© 2022 - 2024 — McMap. All rights reserved.