Ich möchte das Verhalten einer RangeSlider
modellieren, mit einer Klasse RangeSliderModel
mit Eigenschaften beschreiben die Größen (Breiten) für eine bestimmte Reihe von Werten.DependencyProperty und DataBinding - Warum wird Property Setter nicht aufgerufen, wenn UserControl geladen wird?
Dann Ich habe ein Usercontrol in dem die Position und Größe von einigen Rechtecke sollten diese Eigenschaften, und einige Fälle von Thumb
, aus denen die DragDelta
Ereignisse verwendet werden, repräsentieren diese Rechtecke, um die Größe und die Berechnung eines neuen Wertes für eine RangeSliderModel
ermöglichen .
Endlich hat dieses Usercontrol ein DependencyProperty
vom Typ RangeSliderModel
:
public RangeSliderModel Model
{
get
{
return (RangeSliderModel)GetValue(RangeSliderModelProperty);
// or instead calculate a RangeSliderModel from children sizes.
}
set
{
// this IS NOT called when UserControl loads
SetValue(RangeSliderModelProperty, value);
// here I could take the value and calculate new sizes for the children.
}
}
public static readonly DependencyProperty RangeSliderModelProperty =
DependencyProperty.Register("RangeSliderModel",
typeof(RangeSliderModel),
typeof(MyUserControl),
new PropertyMetadata(ModelPropertyChanged));
private static void ModelPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
// this IS called when UserControl loads.
RangeSliderModel model = e.NewValue as RangeSliderModel;
}
Ich erwartete die SetValue
und GetValue
Eigenschaften außer Kraft zu setzen, aber selbst wenn ich binden diese DependencyProperty an eine entsprechende Quelle in Ansichtsmodell, der Setter wird nie genannt! Und ich kann nicht verstehen, warum PropertyChangedHandler stattdessen aufgerufen wird, und viel weniger, was ich mit diesen Informationen tun sollte - ich erwartete, nur GetValue
und SetValue
auf eine Art zu verwenden, die einem ValueConverter ähnlich ist.
In Ihrem ModelPropertyChanged-Handler sollte der Code meinObject.Model = e.NewValue als RangeSliderModel sein. – user2880486