У меня есть пользовательский элемент управления, который имеет DependencyProperty MyAnimal - я связываю Свойство Животных на своем ViewModel к MyAnimal DependencyProperty.
Я прикрепил TextBox на Управление, таким образом, я могу инициировать Событие - каждый раз, когда я инициировал событие, свойство MyAnimal было установлено - однако, если я поместил точку останова на Метод set свойства MyAnimal, это никогда не запускается!
Я предполагаю, что пропускаю что-то фундаментальное о Свойствах/Привязке Зависимости WPF?!
И таким образом, мой вопрос, если я не могу использовать Метод set, как я могу узнать, когда его установил? Если я поместил, если я поместил точку останова после InitializeComponent () его пустой указатель, и я взглянул, чтобы видеть, существует ли Событие рычаг банки до - DatabindingFinished или подобный? но не видьте, каково это было бы...
Кто-либо может помочь?
Спасибо,
Andy
public partial class ControlStrip
{
public ControlStrip()
{
InitializeComponent();
}
public Animal MyAnimal
{
get
{
return (Animal)GetValue(MyAnimalProperty);
}
set
{
SetValue(MyAnimalProperty, value);
}
}
public static readonly DependencyProperty MyAnimalProperty =
DependencyProperty.RegisterAttached("MyAnimal", typeof (Animal), typeof (ControlStrip));
private void TextBox_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)
{
var myAnimal = MyAnimal;
MessageBox.Show(myAnimal.Name);
}
}
Методы установки никогда не вызываются средой выполнения. Они переходят прямо в DependencyProperty. Вам нужно будет добавить дополнительный аргумент к вашему вызову RegisterAttached (). Там вы можете добавить PropertyChangedCallback.
Вот пример кода:
public static readonly DependencyProperty MyAnimalProperty =
DependencyProperty.RegisterAttached("MyAnimal", typeof (Animal), typeof (ControlStrip), new PropertyMetadata(AnimalChanged));
private static void AnimalChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
// Do work here
}
Сеттер предназначен только для вашего использования - вы фактически можете полностью отключить свойство, поскольку DataBinding использует собственно DependencyProperty, а не свойство CLR.
Если вам нужно узнать, когда Если свойство изменяется, вам необходимо указать PropertyMetadata в свойстве зависимости и предоставить PropertyChangedCallback .
Для получения подробной информации я рекомендую прочитать Метаданные свойства зависимости .