سؤال

Blacklight is an older set of WPF controls and styles. The code can be found here. It contains a control called AnimatedExpander which isn't really an expander, rather it just implements HeaderedContentControl and adds an IsExpandedProperty dprop:

    public static readonly DependencyProperty IsExpandedProperty =
       DependencyProperty.Register("IsExpanded", typeof(bool), typeof(AnimatedExpander), new PropertyMetadata(true));

    public bool IsExpanded
    {
        get
        {
            if (this.expandToggleButton != null)
            {
                return this.expandToggleButton.IsChecked.Value;
            }

            return (bool)GetValue(IsExpandedProperty);
        }

        set
        {
            SetValue(IsExpandedProperty, value);
        }
    }

I need to bind to IsExpanded so that I can persist whether expanders are expanded. I'm pretty sure I have the binding setup correctly, and that there is a problem with this custom dependency property. If I open the view in Snoop, and set the IsExpanded=True on the expander, the binding works. However, just clicking the expandToggleButton on the control only expands the control, it doesn't hit my binding.

    <controls:AnimatedExpander IsExpanded="{Binding SGGExpanderExpanded}" />

    private bool _sGGExpanderExpanded;
    public bool SGGExpanderExpanded
    {
        get { return _sGGExpanderExpanded; }
        set
        {
            if (_sGGExpanderExpanded != value)
            {
                _sGGExpanderExpanded = value;
                OnPropertyChanged("SGGExpanderExpanded");
            }
        }
    }

How can I bind to a value that changes when the user clicks the toggle button that is wired to expand the control?

هل كانت مفيدة؟

المحلول

A bad solution:

I was able to make this work by attaching an event to the ToggleButton click and looking at the "sender" Content and IsChecked values to update my viewmodel.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top