Господа, прошу высказаться по поводу того, что лично вам не нравится в реализации DependencyProperty. Есть мнение, что в рамках функциональности DependencyProperty реализовать аналог лучше, чем реализован в Ms, практически нереально. Если бы вы делали DependencyProperty, как бы вы их делали?
Мой вариант в виде C# псевдокода, описывающий основную идею, как видно максимум чего я добился пока — это типизация и отказ от упаковки/распаковки:
class Element
{
static Property<double> widthProperty;
static Element ( )
{
widthProperty = Property ( _ => _.Width, ( ) => new Element ( ), double.NaN, ( s, v ) => s.OnWidthChanged ( v ) );
}
[Options ( Options.Measure | Options.Render | Options.Arrange )]
public double Width
{
get { return GetValue ( widthProperty ); }
set { SetValue ( widthProperty, value ); }
}
protected T GetValue<T> ( Property<T> property )
{
return default ( T );
}
protected void SetValue<T> ( Property<T> property, T value )
{
}
private void OnWidthChanged ( double newWidth )
{
}
private static Property<T> Property<O, T> ( Expression<Func<O, T>> property, Expression<Func<O>> ownerType,
T defaultValue, Action<O, T> changed )
{
return null;
}
}
class Property<T> { }
[Flags]
enum Options
{
Render,
Measure,
Arrange
}
[AttributeUsage ( AttributeTargets.Property )]
class OptionsAttribute : Attribute
{
public OptionsAttribute ( Options options ) { this.Options = options; }
public Options Options { get; private set; }
}