Comments 5
Из кода и предупреждений анализатора видно, что свойства 'Left' и 'Top' объекта 'window' записываются сами в себя. Для некоторых случаев такой вариант действий приемлем, например, когда на метод доступа свойства 'повешена' специальная логика.
Он имеет смысл, но неприемлем. Это нарушение принципа «наименьшего сюрприза».
Когда я читаю код типа:
obj.Left = obj.Left;
Я ожидаю, что это NOP (возможно, длительный NOP, но все же NOP).
+2
Из кода и предупреждений анализатора видно, что свойства 'Left' и 'Top' объекта 'window' записываются сами в себя. Для некоторых случаев такой вариант действий приемлем, например, когда на метод доступа свойства 'повешена' специальная логика. Однако для этих свойств никакой дополнительной логики нет, поэтому причины написания такого кода остаются неясными.А там точно нет никакой дополнительной логики? Это же WPF, тут изменение любого свойства вызывает событие-уведомление об изменении. Таким образом, после присвоение свойства самому себе вызываются обработчики, слушающие изменения этого свойства.
Конечно же, такое решение — всегда костыль. Но это рабочий костыль…
0
По стандартам WPF:
1. Событие PropertyChanged в таких случаях вызывают напрямую.
2. В свойствах первым делом проверяют, что присваиваемое значение не равно текущему — иначе никаких событий не вызывается.
Хотя, конечно, можно извернуться и проигнорировать рекомендации, и навесить на такую строку какое-то нужное поведение, но это уже слишком.
1. Событие PropertyChanged в таких случаях вызывают напрямую.
2. В свойствах первым делом проверяют, что присваиваемое значение не равно текущему — иначе никаких событий не вызывается.
Хотя, конечно, можно извернуться и проигнорировать рекомендации, и навесить на такую строку какое-то нужное поведение, но это уже слишком.
0
Во-первых, для DependencyProperty это событие нельзя вызвать напрямую. Оно вызывается только через присвоение значения.
Во-вторых, никакой проверки на то, что присваиваемое значение не равно текущему — не делается ни в свойстве, ни на уровне DependencyProperty. Рекомендаций по поводу таких проверок я тоже нигде не видел.
Напоминаю, что используются стандартные свойства стандартного же класса Window.
Во-вторых, никакой проверки на то, что присваиваемое значение не равно текущему — не делается ни в свойстве, ни на уровне DependencyProperty. Рекомендаций по поводу таких проверок я тоже нигде не видел.
Напоминаю, что используются стандартные свойства стандартного же класса Window.
+1
Sign up to leave a comment.
Проверяем исходный код набора C#/.NET компонентов от Sony