Комментарии 7
1) Прекращайте истереть и используйте Fody/PropertyChanged. Минус — это AOP (например, не поставить брэкпоинт, хотя это нужно крайне редко). Плюс — автоматические вычислимые свойства.
2) Для борьбы с чистотой кода можно вместо каждого нотифицируемого свойства использовать Prism/ObservableObject или runceel/ReactiveProperty. Биндиться придется к *.Value, c поддержкой вычислимых свойств тоже придется повозится, но зато на каждое свойство уникальное событие — не надо работать со строками.
3) Мы в одном проекте использовали шаблоны Visual Studio T4. Можно написать шаблон, который по основному классу будет генерировать во время написания кода partial-составляющую с нужными уведомлениями и прочим. Очень гибкое решение, можно много чего так реализовать. Из минусов — привязка к конкретной студии разработки.
2) Для борьбы с чистотой кода можно вместо каждого нотифицируемого свойства использовать Prism/ObservableObject или runceel/ReactiveProperty. Биндиться придется к *.Value, c поддержкой вычислимых свойств тоже придется повозится, но зато на каждое свойство уникальное событие — не надо работать со строками.
3) Мы в одном проекте использовали шаблоны Visual Studio T4. Можно написать шаблон, который по основному классу будет генерировать во время написания кода partial-составляющую с нужными уведомлениями и прочим. Очень гибкое решение, можно много чего так реализовать. Из минусов — привязка к конкретной студии разработки.
+2
Истерики нет, меня вполне устраивает класические OnPropertyChanged через expression,
У ObservableObject интересная наследственность System.Windows.FrameworkElement<-Microsoft.Practices.Prism.ObservableObject + странный биндинг, не уверен что это чистый код. Автоген это конечно круто, а чем вынос дыма в partial лучше наследования или композиции?
например, не поставить брэкпоинтпри написании IInterceptionBehavior это не проблема.
У ObservableObject интересная наследственность System.Windows.FrameworkElement<-Microsoft.Practices.Prism.ObservableObject + странный биндинг, не уверен что это чистый код. Автоген это конечно круто, а чем вынос дыма в partial лучше наследования или композиции?
0
Я в простых случаях пользуюсь https://www.nuget.org/packages/KindOfMagic/ и забыл об этой проблеме (чуть подробнее — https://kindofmagic.codeplex.com/)
0
В своё время, делали так:
public static Boolean Set(this INotifyPropertyChangedEx o, ref T property, T value, [CallerMemberName] String propertyName = null)
{
if (Equals(property, value))
{
return false;
}
property = value;
o.NotifyOfPropertyChange(propertyName);
return true;
}
использовали:
public bool IsLoading
{
get { return _isLoading; }
set { this.Set(ref _isLoading, value); }
}
Вкупе со сниппетом довольно удобно. Плохой момент в том, что INotifyPropertyChangedEx из пакета Caliburn.Micro (но несложнен в реализации)
public static Boolean Set(this INotifyPropertyChangedEx o, ref T property, T value, [CallerMemberName] String propertyName = null)
{
if (Equals(property, value))
{
return false;
}
property = value;
o.NotifyOfPropertyChange(propertyName);
return true;
}
использовали:
public bool IsLoading
{
get { return _isLoading; }
set { this.Set(ref _isLoading, value); }
}
Вкупе со сниппетом довольно удобно. Плохой момент в том, что INotifyPropertyChangedEx из пакета Caliburn.Micro (но несложнен в реализации)
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Чистый код под флагом АОП и ненавистный #ПредупреждаюНедвижимостьИзменился