INotifyPropertyChanged по сравнению с DependencyProperty [дубликат]

Это не связано с importlib; если вы импортируете модуль явно, как from plugins.plugin1 import b, вы увидите ту же проблему. Это потому, что a не является модулем, фактическое имя модуля - plugins.plugin1.a.

Вы должны использовать относительный импорт в плагине. Измените import a на from . import a

19
задан Community 23 May 2017 в 12:16
поделиться

4 ответа

Использование памяти: INotifyPropertyChanged является интерфейсом, таким образом, близко к нулевой памяти наверху. "Близко к нулю", потому что я предполагаю, что Вы будете писать метод OnPropertyChanged и возможно некоторые обработчики событий в других классах (если Вы не будете действительно просто говорить о привязке к WPF), таким образом, будет небольшой код наверху.

Производительность: DependancyProperties имеют большое продолжение под покрытиями. Если Вы не пишете самый непроизводительный метод OnPropertyChanged никогда, я держал бы пари, что INotifyPropertyChanged будет победителем перфекта также.

, Если у Вас нет определенной причины желания/необходимости поведений, обеспеченных DP, я просто пошел бы с INotifyPropertyChanged.

Обновление

Как комментарий упоминает, что обязательная производительность немного быстрее для РАЗНОСТЕЙ ПОТЕНЦИАЛОВ (на 15-20% быстрее, но все еще только различие меньше чем 50 мс для 1 000 связывает), должный на сумму отражения, необходимого к к поиску/сцеплению прямых свойств. Это технически отличается, чем выполнение обновления связанного с данными элемента UI, который является тем, к чему был приспособлен мой комментарий. Но это не означает, что мое пари все еще корректно также. Так несколько примеров и много землеройной машины Отражателя.NET позже это выглядит... неокончательным. Оба пути делают тонну работы под покрытиями, и я не смог заставить любые примеры показывать категорическую разницу в производительности обновления.

я все еще придерживаюсь INotifyPropertyChanged, если у меня нет определенной потребности в РАЗНОСТЯХ ПОТЕНЦИАЛОВ, но это было, по крайней мере, интересное осуществление для ввода по абсолютному адресу вокруг в ядро WPF еще немного. :)

21
ответ дан 30 November 2019 в 02:45
поделиться

Неважно я просто нашел ответы, которые я искал в следующем вопрос .

я повторно отправлю ответ "LBugnion" (таким образом, весь кредит перейдет к нему) для Вашего удобства:

<час>

Реализация INotifyPropertyChanged имеет много преимуществ перед DependencyObjects (я сокращу, это ДЕЛАЕТ для помощи), и использование DependencyProperties (РАЗНОСТИ ПОТЕНЦИАЛОВ):

  • Это более легко
  • , Позволяет Вам, больше свободы в моделировании Ваших объектов
  • Может быть сериализировано легко
  • , можно сгенерировать событие, когда Вы хотите, который может быть полезным в определенных сценариях, например, когда Вы хотите связать несколько изменений только в одной операции UI, или когда необходимо сгенерировать событие, даже если бы данные не изменились (для принуждения перерисовки...)

, С другой стороны, наследовать DOS в WPF имеет следующие преимущества:

  • Легче реализовать специально для новичков.
  • Вы получаете механизм обратного вызова (почти) бесплатно, позволяя Вам быть уведомленными, когда значение свойства изменяется
  • , Вы добираетесь, механизм приведения с позволяет Вам определять правила для макс., минута и приведенная стоимость свойства.

существуют другие соображения, но это основное.

я думаю, что общее согласие состоит в том, что РАЗНОСТИ ПОТЕНЦИАЛОВ являются большими для средств управления (и можно реализовать CustomControl с пользовательскими РАЗНОСТЯМИ ПОТЕНЦИАЛОВ даже в Silverlight), но для объектов данных необходимо скорее реализовать INotifyPropertyChanged.

HTH, Laurent

13
ответ дан 30 November 2019 в 02:45
поделиться

По моему скромному мнению, INotifyPropertyChanged очень легок и прост в использовании по сравнению с РАЗНОСТЯМИ ПОТЕНЦИАЛОВ. Что касается производительности/памяти, сделайте Вас действительно потребность знать? Knuth хочет знать.

, Очевидно, необходимо определить требования и видеть, сколько DP Вы ожидаете создавать/вторыми, сколько времени жил, они и запускают несколько тестов. Я сделал это прежде и не видел проблем с созданием недолгого DP в ~10k/sec (YMMV).

1
ответ дан 30 November 2019 в 02:45
поделиться

Как MSDN заявляет, WPF более быстр при привязке к DependencyProperties, чем к пользовательскому использованию объектов CLR INotifyPropertyChanged.

См. http://msdn.microsoft.com/en-us/library/bb613546.aspx

11
ответ дан 30 November 2019 в 02:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: