WPF Datatrigger not firing when expected WPF Datatrigger not firing when expected wpf wpf

WPF Datatrigger not firing when expected


Alternatively, you could replace your XAML with this:

<TextBlock Margin="0,0,5,0" Text="{Binding ElementName=EditListBox, Path=SelectedItems.Count}"/><TextBlock>    <TextBlock.Style>        <Style TargetType="{x:Type TextBlock}">            <Setter Property="Text" Value="items selected"/>            <Style.Triggers>                <DataTrigger Binding="{Binding ElementName=EditListBox, Path=SelectedItems.Count}" Value="1">                    <Setter Property="Text" Value="item selected"/>                </DataTrigger>            </Style.Triggers>        </Style>    </TextBlock.Style></TextBlock>

Converters can solve a lot of binding problems but having a lot of specialized converters gets very messy.


The DataTrigger is firing but the Text field for your second TextBlock is hard-coded as "items selected" so it won't be able to change. To see it firing, you can remove Text="items selected".

Your problem is a good candidate for using a ValueConverter instead of DataTrigger. Here's how to create and use the ValueConverter to get it to set the Text to what you want.

Create this ValueConverter:

public class CountToSelectedTextConverter : IValueConverter{    #region IValueConverter Members    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)    {        if ((int)value == 1)            return "item selected";        else            return "items selected";    }    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)    {        throw new NotImplementedException();    }    #endregion}

Add the namespace reference to your the assembly the converter is located:

xmlns:local="clr-namespace:ValueConverterExample"

Add the converter to your resources:

<Window.Resources>    <local:CountToSelectedTextConverter x:Key="CountToSelectedTextConverter"/></Window.Resources>

Change your second textblock to:

    <TextBlock Text="{Binding ElementName=EditListBox, Path=SelectedItems.Count, Converter={StaticResource CountToSelectedTextConverter}}"/>