Search code examples
wpfxamltypesbindingdatatrigger

WPF Trigger based on Object Type


Is there a way to do a comparison on object type for a trigger?

<DataTrigger Binding="{Binding SelectedItem}" Value="SelectedItem's Type">
</DataTrigger>

Background: I have a Toolbar and I want to Hide button's depending on what subclass is currently set to the selected item object.

Thanks


Solution

  • Why not just use a converter that takes an object and returns a string of the object type?

    Binding="{Binding SelectedItem, Converter={StaticResource ObjectToTypeString}}"

    and define the converter as:

    public class ObjectToTypeStringConverter : IValueConverter
    {
        public object Convert(
         object value, Type targetType,
         object parameter, System.Globalization.CultureInfo culture)
        {
            return value.GetType().Name;            
        }
    
        public object ConvertBack(
         object value, Type targetType,
         object parameter, System.Globalization.CultureInfo culture)
        {
            // I don't think you'll need this
            throw new Exception("Can't convert back");
        }
    }
    

    You'll need to declare the static resource somewhere in your xaml:

    <Window.Resources>
        <convs:ObjectToTypeStringConverter x:Key="ObjectToTypeString" />
    </Window.Resources>
    

    Where 'convs' in this case is the namespace of where the converter is.

    Hope this helps.