Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Binding to the "object.GetType()"?

I have an

ObservableCollection<object>

Let's consider we have 2 items in it :

int a = 1;
string str = "hey!";

My xaml file acces to it via DataContext and I'd like to display the Type (System.Type) of the object with a Binding. Here is the code I have

<TextBlock Text="{Binding}"/>

And I'd like to display in my TextBlocks is :

int
string

Thanks for any help !

like image 719
Guillaume Slashy Avatar asked Dec 21 '22 05:12

Guillaume Slashy


1 Answers

You'll need to use an IValueConverter to do this.

[ValueConversion(typeof(object), typeof(string))]
public class ObjectToTypeConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value == null ? null : value.GetType().Name // or FullName, or whatever
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new InvalidOperationException();
    }
}

Then add it to your resources...

<Window.Resources>
    <my:ObjectToTypeConverter x:Key="typeConverter" />
</Window.Resources>

Then use it on your binding

<TextBlock Text="{Binding Mode=OneWay, Converter={StaticResource typeConverter}}" />
like image 147
Adam Robinson Avatar answered Jan 03 '23 16:01

Adam Robinson