Кажется, у меня такая же проблема с любой реализацией RangeSlider
(или, проще говоря, ползунка с двумя большими пальцами).
Я хочу привязать оба больших пальца к контексту данных и сделать эту привязку двусторонней. К сожалению, мне кажется, что я могу привязываться только к 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));
}
}