는 I 값들의 주어진 세트에 대해 크기 (폭)을 설명하는 속성 RangeSliderModel
클래스를 사용하여 RangeSlider
의 동작을 모델링 할.DependencyProperty 및 DataBinding - UserControl이로드 될 때 속성 설정 기가 호출되지 않는 이유는 무엇입니까?
다음, 나는 위치와 크기 일부 사각형의 이러한 속성을 표현해야하고, Thumb
의 어떤 경우 어떤에서 DragDelta
사건이 사각형의 크기를 조정하고 RangeSliderModel
에 대한 새 값의 계산을 가능하게하는 데 사용되는의 UserControl을 생성 . 마침내
이 UserControl을 유형 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
속성을 오버라이드 (override) 할 것으로 예상 되었으나, 내가 뷰 모델에 해당하는 소스이 DependencyProperty에 바인딩도, 세터 절대로 불리지 않는다! 난 그냥 GetValue
및 SetValue
ValueConverter와 유사한 방법으로 사용 기다리고 있었다 - 그리고 나는 아주 PropertyChangedHandler가 대신 호출, 그리고 훨씬 덜 나는이 정보로 무엇을해야하는 이유를 이해할 수 없다. 당신이 바인딩을 통해 설정할 때
이 코드는 RangeSliderModel로 myObject.Model = e.NewValue을해야합니다. – user2880486