Search code examples
c#wpfdatatrigger

WPF DataTrigger not firing on NotifyProperyChanged?


I'm trying to dynamically hide elements in my ComboBox based on a boolean flag in the objects bound it it but I can't seem to get it working

Here is me XAML

<xctk:CheckComboBox Name="TagsDropDown" HorizontalAlignment="Left" Height="30" Margin="0,0,0,0" VerticalAlignment="Top" Width="450" IsEditable="True"  IsTextSearchEnabled="True" ItemsSource="{Binding AllTags}" ItemSelectionChanged="TagsDropDown_OnItemSelectionChanged">  
        <xctk:CheckComboBox.ItemTemplate>
            <DataTemplate>
                <Grid HorizontalAlignment="Stretch">
                    <TextBlock Margin="2" Text="{Binding Name}"/>
                    <TextBlock Margin="2" HorizontalAlignment="Right" Text="{Binding Count}"/>
                </Grid>
            </DataTemplate>              
        </xctk:CheckComboBox.ItemTemplate>
        <xctk:CheckComboBox.ItemContainerStyle>
            <Style TargetType="xctk:SelectorItem">
                <Setter Property="Visibility" Value="Visible"/>
                <Style.Triggers>
                 <!--   <DataTrigger steamTools:TriggerTracing.TriggerName="is zero" steamTools:TriggerTracing.TraceEnabled="True" Binding="{Binding Path=IsZero, RelativeSource={RelativeSource Self} }" Value="True">-->
                    <DataTrigger Binding="{Binding Path=IsZero, RelativeSource={RelativeSource Self} }" Value="True">
                        <DataTrigger.Setters>
                            <Setter Property="Visibility" Value="Collapsed"/>
                        </DataTrigger.Setters>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </xctk:CheckComboBox.ItemContainerStyle>
    </xctk:CheckComboBox>

And the class bound to the control

 public class CompTag : INotifyPropertyChanged
{
    private int _count;
    private bool _isZero;
    public string Name { get; set; }

    public bool IsZero
    {
        get { return _isZero; }
        set
        {
            if (_isZero != value)
            {
                _isZero = value;
                OnPropertyChanged("IsZero");
            }
        }
    }

    public int Count
    {
        get { return _count; }
        set
        {
            if (_count != value)
            {
                _count = value;
                OnPropertyChanged("Count");
            }
        }
    }

Can anyone see what I am doing wrong?

Thanks in advance!


Solution

  • Does your AllTags list have isZero member?(in model )

    if yes

    Try This

    Binding="{Binding Path=IsZero, {RelativeSource FindAncestor, AncestorType={x:Type xctk:CheckComboBox}} }"
    

    if no, and it in your datacontext class try to remove RelativeSource={RelativeSource Self}