Привязка свойства приложения к собственному свойству зависимости
Я сделал собственное свойство зависимости, как это
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 - просто удобство для потребителей вашего класса.