При установке свойства зависимости в XAML или через привязку среда выполнения всегда будет обходить псевдоним свойства экземпляра и напрямую вызывать GetValue
и SetValue
. Из-за этого ваш установщик экземпляров не вызывается.
То, что вы, возможно, пожелаете рассмотреть, это регистрация метода со свойством зависимости, которое будет вызываться при изменении свойства. Это проще всего сделать при создании PropertyMetadata
для свойства зависимостей.
Я полагаю, что следующий пример делает то, что вы хотите сделать. В этом примере у моего класса есть два свойства зависимостей с псевдонимами First и Second. Когда я устанавливаю значение для First, мой обработчик изменений вызывается, и я устанавливаю значение Second.
public class DependencyPropertyTest : DependencyObject
{
public static readonly DependencyProperty FirstProperty;
public static readonly DependencyProperty SecondProperty;
static DependencyPropertyTest()
{
FirstProperty = DependencyProperty.Register("FirstProperty",
typeof(bool),
typeof(DependencyPropertyTest),
new PropertyMetadata(false, FirstPropertyChanged));
SecondProperty = DependencyProperty.Register("SecondProperty",
typeof(string),
typeof(DependencyPropertyTest),
new PropertyMetadata(null));
} // End constructor
private bool First
{
get { return (bool)this.GetValue(FirstProperty); }
set { this.SetValue(FirstProperty, value); }
} // End property First
private string Second
{
get { return (string)this.GetValue(SecondProperty); }
set { this.SetValue(SecondProperty, value); }
} // End property Second
private static void FirstPropertyChanged(DependencyObject dependencyObject,
DependencyPropertyChangedEventArgs ea)
{
DependencyPropertyTest instance = dependencyObject as DependencyPropertyTest;
if (instance == null)
{
return;
}
instance.Second = String.Format("First is {0}.", ((bool)ea.NewValue).ToString());
} // End method FirstPropertyChanged
} // End class DependencyPropertyTest
Надеюсь, это поможет.