Ich mochte nicht wie verbose dp's sind, da der meiste Code nur wiederholt wird, ich habe es nur in eine generische Klasse gewickelt.Warum wickeln Leute DependencyProperties nicht in einer generischen Klasse ein?
Nachdem ich ziemlich viel Beispielcode gesehen habe, habe ich mich gefragt, warum mehr Leute nicht dasselbe machen.
Ich habe keine Probleme in meiner Demo-Anwendung zu sprechen, und es macht die ViewModels einfacher zu verwalten.
Probe:
class GenericDependancyProperty<T> : DependencyObject
{
// Value dependency property
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(T), typeof(GenericDependancyProperty),
new FrameworkPropertyMetadata((T)default(T),
new PropertyChangedCallback(OnValueChanged)));
// getter/setter for the Value dependancy property
public T Value
{
get { return (T)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
// Handles changes to the Value property.
private static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
GenericDependancyProperty<T> target = (GenericDependancyProperty<T>)d;
T oldValue = (T)e.OldValue;
T newValue = target.Value;
target.OnValueChanged(oldValue, newValue);
}
// Provides derived classes an opportunity to handle changes to the Value property.
protected virtual void OnValueChanged(T oldValue, T newValue)
{
if (ValueChanged != null)
{
ValueChanged(newValue);
}
}
// Value changed event
public event Action<T> ValueChanged;
}
Ist dies eine schlechte Idee?
Hey, ich habe Ihren Code vor einiger Zeit komplett ausgepackt und konvertiert, um alle benutzerdefinierten Typenbeschreibungen zu erstellen. Es öffnete meine Augen wirklich für das Potential von T4. – Will
Danke Will - Ich bin froh, dass es dir gefallen hat. Ich bin jetzt süchtig nach T4 ;-) – ColinE