привязка свойства приложения к собственному свойству зависимости - PullRequest
0 голосов
/ 03 декабря 2011

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

    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 Ответ

1 голос
/ 03 декабря 2011

Вы не можете включать какую-либо логику в свою оболочку свойства зависимостей.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 - просто удобство для потребителей вашего класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...