RangeSlider
对于 a (或更简单地说,带有 2 个拇指的滑块)的任何实现,我似乎都遇到了同样的问题。
我想将两个拇指绑定到数据上下文并让该绑定是双向的。不幸的是,我似乎只能绑定到 SET 滑块的位置。如果我用鼠标移动它们,它们就会失去绑定。
我已经使用了几个范围滑块,但为了简单起见,在这个示例中,我使用了来自thejoyofcode.com的一个。(我没有修改它,所以我现在不包括它,但如果有帮助我可以)。我使用下面的 XAML 使用它,目的是让框架滑块(名为“MinSlider”和“MaxSlider”)也绑定到相同的数据源。
当我移动框架滑块时,所有绑定的项目都会跟随它们,包括范围滑块,但是如果我在范围滑块上移动一个拇指,它不会更新数据源或框架滑块。
我的窗口 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 类...
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));
}
}