Ответ 1
Это помогло мне понять рассуждения:
Основное отличие состоит в том, что значение обычного свойства .NET напрямую читается из частного члена в вашем классе, тогда как значение DependencyProperty разрешено динамически при вызове метода GetValue(), который унаследован от DependencyObject.
Когда вы устанавливаете значение свойства зависимости, оно не сохраняется в поле вашего объекта, а в словаре ключей и значений, предоставляемых базовым классом DependencyObject. Ключ записи - это имя свойства, а значение - это значение, которое вы хотите установить.
Преимущества свойств зависимостей следующие:
Снижение объема памяти
Это огромная диссипация для хранения поля для каждого свойства, если вы считаете, что более 90% свойств элемента управления пользовательского интерфейса обычно остаются в исходных значениях. Свойства зависимостей решают эти проблемы только путем сохранения модифицированных свойств в экземпляре. Значения по умолчанию сохраняются один раз в пределах свойства зависимостей.
Наследование значений
При доступе к свойству зависимостей значение разрешается с использованием стратегии с разрешающей способностью. Если локальное значение не задано, свойство зависимостей перемещается по логическому дереву до тех пор, пока не найдет значение. Когда вы устанавливаете FontSize в корневом элементе, он применяется ко всем текстовым блокам ниже, за исключением того, что вы переопределяете значение.
Изменить уведомление
Свойства зависимостей имеют встроенный механизм уведомления об изменениях. Зарегистрировав обратный вызов в метаданных свойств, вы получите уведомление, когда значение свойства было изменено. Это также используется привязкой данных.
От: Учебники WPF.