Присоединенное свойство изменило событие?

Есть ли способ получить уведомление об изменении, если изменилось вложенное свойство?

Простой пример Canvas с Rectangle в этом. Положение Rectange устанавливается с помощью DepenendyProperties Canvas.Top а также Canvas.Left, Я использую Adorner для перемещения прямоугольника, изменяя Canvas.Top а также Canvas.Left,

<Canvas Width="500" Height="500" >
   <Rectangle Width="40" Height="40" Canvas.Left="10" Canvas.Top="20" />
</Canvas>

Следующим шагом является создание стрелки между двумя Rectangles, Чтобы следить за движением Rectangles Стрелка должна получать уведомление об изменении всякий раз, когда положение Rectangleизменения. Это было бы легко, если бы я мог просто получить уведомление об изменении, когда свойство Attached Canvas.Topизменения.

Спасибо за любую помощь, Майкл

1 ответ

Решение

Почему вы не используете привязку? Это именно то, для чего они предназначены...

Если по какой-либо причине вы не можете использовать привязку, вы можете добавить обработчик, который будет уведомлен об изменении значения свойства:

var topDescriptor = DependencyPropertyDescriptor.FromProperty(Canvas.TopProperty, typeof(Rectangle));
var leftDescriptor = DependencyPropertyDescriptor.FromProperty(Canvas.LeftProperty, typeof(Rectangle));
topDescriptor.AddValueChanged(rectangle, rectangle_PositionChanged);
leftDescriptor.AddValueChanged(rectangle, rectangle_PositionChanged);

...

private void rectangle_PositionChanged(object sender, EventArgs e)
{
    ...
}
Другие вопросы по тегам