1

I want an expander to expand if a flag in the VM is set. I also want the user to be able to override this and expand/collapse at will. The following code doesn't work, the timer kicks in and the expander expands and collapses repeatedly - then If you click the expander manually it swiches too - but the trigger fails to expand or collapse the expander. Its of course as if the manually keyed value is set and is taking priority over the Trigger Setter.

<Expander Header="Test" BorderThickness="2" BorderBrush="Black" VerticalAlignment="Bottom">
  <Expander.Style >
    <Style TargetType="Expander">
       <Setter Property="IsExpanded"  Value="True"></Setter>
       <Style.Triggers>
          <DataTrigger  Binding="{Binding DataContext.AmSet,
              RelativeSource={RelativeSource AncestorType=Grid}}"
                         Value="True">
                <Setter Property="IsExpanded" Value="False"></Setter>
          </DataTrigger>
       </Style.Triggers>
    </Style>
 </Expander.Style>

  <Expander.Content>
            <Border Background="AliceBlue" Width="50" Height="50"></Border>
  </Expander.Content>

The VM has a dummy timer that just switches the flag to trigger the update as below

public class vm : INotifyPropertyChanged
{
    public vm()
    {
        t = new System.Timers.Timer(1000);
        t.Elapsed += t_Elapsed;
        t.Start();
    }
    bool _AmSet = false;
    public bool AmSet
    {
        get { return _AmSet; }
        set
        {
            _AmSet = value;
            OnPropertyChanged("");
        }
    }
    void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        AmSet = !AmSet;
    }
    System.Timers.Timer t;


    private void OnPropertyChanged(string prop)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(prop));
    }
    public event PropertyChangedEventHandler PropertyChanged;
}
4

1 回答 1

0

您是否有理由需要使用 DataTrigger 执行此操作?它可以通过双向绑定轻松实现。

<Expander Header="Test" BorderThickness="2" BorderBrush="Black" VerticalAlignment="Bottom" IsExpanded="{Binding AmSet, Mode=TwoWay}"/>

于 2013-11-12T23:40:39.320 回答