2013-08-08 1 views
1

RangeSlider (또는 더 간단히 말해서 2 개의 엄지 손가락이있는 슬라이더)의 구현에서 이와 동일한 문제가있는 것 같습니다.WPF 범위 슬라이더 바인딩되지 않음

엄지 손가락을 모두 datacontext에 바인딩하고 그 바인딩을 양방향으로하고 싶습니다. 불행히도, 나는 단지 슬라이더의 위치를 ​​SET에 바인딩 할 수있는 것 같습니다. 마우스로 그들을 움직이면 그들은 구속력을 잃어 버립니다.

몇 가지 범위 슬라이더를 사용했지만 간단하게 유지하려면이 예제에서 thejoyofcode.com을 사용합니다. (나는 그것을 수정하지 않았으므로 지금은 여기에 포함시키지 않고 도움이된다면 할 수있다.) 프레임 워크 슬라이더 ("MinSlider"및 "MaxSlider")도 동일한 데이터 소스에 바인딩되도록하기 위해 아래의 XAML을 사용하여 소비합니다. 내가 프레임 워크 슬라이더를 이동하면

는 바운드 항목의 모든 범위 슬라이더를 포함하여, 그들을 따라,하지만 난 범위 슬라이더에 엄지 손가락 중 하나를 이동하는 경우 그것은 하지 갱신 데이터 소스 또는 프레임 워크 슬라이더를한다.

내 창 XAML ...

 <Separator></Separator> 

     <controls:RangeSlider x:Name="Slider" 
           Minimum="10" 
           Maximum="20" 
           LowerValue="{Binding Min, UpdateSourceTrigger=PropertyChanged}" 
           UpperValue="{Binding Max, UpdateSourceTrigger=PropertyChanged}" 
           /> 
     <TextBlock Text="{Binding LowerValue, ElementName=Slider}"/> 
     <TextBlock Text="{Binding UpperValue, ElementName=Slider}"/> 

     <Separator></Separator> 

     <Slider x:Name="MaxSlider" Minimum="10" Maximum="20" Value="{Binding Max}"/> 
     <TextBlock Text="{Binding Value, ElementName=MaxSlider}"/> 

     <Separator></Separator> 

     <TextBlock Text="{Binding Min}"/> 
     <TextBlock Text="{Binding Max}"/> 
    </StackPanel> 
</Window> 
... 그리고 MYSOURCE 클래스 ... 당신이 BindingMode=TwoWay을 설정해야하기 때문에

public class MySource : INotifyPropertyChanged 
{ 
    private double _min; 
    public double Min 
    { 
     get { return _min; } 
     set 
     { 
      _min = value; 
      RaisePropertyChanged("Min"); 
     } 
    } 

    private double _max; 
    public double Max 
    { 
     get { return _max; } 
     set 
     { 
      _max = value; 
      RaisePropertyChanged("Max"); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) 
    { 
     var handler = this.PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, e); 
     } 
    } 

    protected void RaisePropertyChanged(String propertyName) 
    { 
     OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); 
    } 

} 
+0

코드 숨김에서 최소 및 최대를 변경하면 슬라이더의 위치가 변경됩니까? –

답변

2

그것은이다 Binding에 있습니다.

Control 저자는이 기본 동작 할 수 있습니다합니다 (WPF Slider가이 작업을 수행) 종속성 속성이 FrameworkPropertyMetadata.BindsTwoWayByDefault에 등록되지 않는 한,하지만, 다음 OneWay이 사용되는 모드입니다.

MSDNBindingMode을 설명합니다.