wpf, как сказать, когда привязка данных закончена? - PullRequest
5 голосов
/ 21 декабря 2009

У меня есть пользовательский элемент управления, который имеет DependencyProperty MyAnimal - я привязываю свойство Animal в моей модели представления к MyAnimal DependencyProperty.

Я прикрепил TextBox к элементу управления, чтобы я мог инициировать событие - всякий раз, когда я запускаю событие, свойство MyAnimal было установлено - однако, если я ставлю точку останова на Setter свойства MyAnimal, оно никогда не срабатывает!

Полагаю, я упускаю что-то фундаментальное из свойств / привязки WPF-зависимостей?!

Итак, мой вопрос: если я не могу использовать Сеттер, как я могу узнать, когда он был установлен? Если я поставлю, если я поставлю точку останова после 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);
    }

}

Ответы [ 2 ]

5 голосов
/ 21 декабря 2009

Методы установки никогда не вызываются средой выполнения. Они идут прямо в 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
 }
4 голосов
/ 21 декабря 2009

Установщик предназначен только для вашего использования - вы фактически можете оставить свойство полностью отключенным, поскольку DataBinding использует сам фактический DependencyProperty, а не свойство CLR.

Если вам необходимо узнать, когда свойство изменяется, вам нужно указать PropertyMetadata в свойстве зависимости и предоставить PropertyChangedCallback .

Для получения подробной информации, я рекомендую прочитать Метаданные свойства зависимости .

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