RangeSliderModel
というクラスを使用して、与えられた値のセットのサイズ(幅)を記述するプロパティを使って、RangeSlider
の振る舞いをモデル化したいと思います。DependencyPropertyとDataBinding - UserControlの読み込み時にプロパティセッターが呼び出されないのはなぜですか?
そして、IはDragDelta
イベントがこれらの矩形のサイズを変更し、RangeSliderModel
の新しい値の計算を可能にするために使用されるいくつかの矩形の位置および大きさは、それらの性質を表すべきであるユーザーコントロール、およびThumb
のいくつかのインスタンスを作成しました。最後に
、このユーザーコントロールは、タイプRangeSliderModel
のDependencyProperty
を持っています
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;
}
私はSetValue
とGetValue
プロパティをオーバーライドするために期待していたが、私はViewModelにで対応するソースには、このたDependencyPropertyをバインドする場合でも、セッター決して呼ばれない!なぜPropertyChangedHandlerが代わりに呼び出されたのか、私はこの情報で何をすればいいのか理解できません。ValueConverterに似た方法でちょうどGetValue
とSetValue
を使用することを期待していました。
ModelPropertyChangedハンドラでは、コードはRangeSliderModelとしてmyObject.Model = e.NewValueである必要があります。 – user2880486