У меня такой код в User Control. Идея заключается в том, что она работает как обычная переменная, но когда она установлена, она заставит элемент управления перерисовать.
private int _imageHeight;
public int ImageHeight
{
get { return _imageHeight; }
set
{
_imageHeight = value;
Invalidate();
}
}
Я понимаю { get; set; }
{ get; set; }
{ get; set; }
дает мне весь код, который я только что написал, кроме части Invalidate()
. Есть ли какой-то способ, которым мне не нужно писать код объявления declare и getter/setter, но все же получить часть Invalidate()?
Концепция, которую вы ищете, называется аспектно-ориентированным программированием. С аспектно-ориентированным программированием вы можете избавиться от Boilerplate и объявить аспект (как атрибут), который делает Invalidate после вызова сеттера. (Может быть сделано и на уровне класса).
https://www.postsharp.net/ разрешает АОП в С# Я пытался попробовать это один раз, к сожалению, остальная часть нашей команды не считает, что этот тип шаблона является проблемой. Поэтому я снова бросил его, но он может делать именно то, что вы хотите.
invalidate
в том же члене, где сделан вызов сеттеру?