Привязка свойства приложения к собственному свойству зависимости

Я сделал собственное свойство зависимости, как это

    public bool Visible
    {
        get
        {
            return (bool)GetValue(VisibleProperty);
        }
        set
        {
            System.Windows.Visibility v = value == true ? System.Windows.Visibility.Visible : System.Windows.Visibility.Hidden;
            SetValue(VisibleProperty, value);
            border.Visibility = v;
        }
    }

    public static readonly DependencyProperty VisibleProperty = DependencyProperty.Register("Visible", typeof(bool), typeof(SpecialMenuItem), new UIPropertyMetadata(false));

Я привязываю свойство своего приложения к нему, но не повезло. Свойство приложения (app.xaml.cs) и привязка:

    public bool IsGamePlaying
    {
        get
        {
            return isGamePlaying;
        }
        set
        {
            isGamePlaying = value;
        }
    }
    private bool isGamePlaying;

<my:SpecialMenuItem ... Visible="{Binding Path=IsGamePlaying, Source={x:Static Application.Current}}" />

Когда я в отладке, он читает свойство IsGamePlaying, но не пытается установить свойство Visible

Как заставить это работать?

1 ответ

Решение

Вы не можете включать какую-либо логику в свою оболочку свойства зависимостей. WPF будет, по возможности, напрямую вызывать GetValue/SetValue, а не использовать ваше свойство CLR. Вы должны включить любую постороннюю логику, используя метаданные в свойстве зависимости. Например:

public static readonly DependencyProperty VisibleProperty = DependencyProperty.Register("Visible", typeof(bool), typeof(SpecialMenuItem), new FrameworkPropertyMetadata(false, OnVisibleChanged));

private static void OnVisibleChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
{
    // logic here will be called whenever the Visible property changes
}

Оболочка CLR - просто удобство для потребителей вашего класса.

Другие вопросы по тегам