2016-01-12 2 views
0

У меня есть ползунок, привязанный к двустворчатым клещам (через Ticks = "{Binding Ticks}"), который имеет набор значений. Коллекция Ticks в конечном итоге очищается и заполняется совершенно разными значениями. Проблема в том, что после пополнения слайдер по-прежнему перемещается по старым тикам, даже если значения в коллекции уже разные.Ползунок полностью меняет тики более одного раза

Как это обходное решение?

ответ

0

Кажется, что коллекция тиков не зависит от значений min и max.

Значение ползунка зависит от значения Min и Max, тики - это только «украшение».

Приведенный выше пример должен работать.

В общем, при смене коллекции клещей я изменяю значения Minimum и Maximum, чтобы соответствовать минимальным и максимальным размерам коллекции тиков.

C# часть:

public partial class MainWindow : Window,INotifyPropertyChanged 
{ 
    private double _value; 
    private double _minimum; 
    private double _maximum; 
    private DoubleCollection _tickCollection; 

    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = this; 

     TickCollection = new DoubleCollection(); 
     for (double i = 0.0; i < 5.0; i+=0.5) 
     { 
      TickCollection.Add(i); 
     } 
     Minimum = 0.0; 
     Maximum = 5.0; 
     Value = 2.3; 

    } 

    public double Value 
    { 
     get { return _value; } 
     set 
     { 
      _value = value; 
      OnPropertyChanged(); 
     } 
    } 

    public double Minimum 
    { 
     get { return _minimum; } 
     set { _minimum = value; OnPropertyChanged(); } 
    } 

    public double Maximum 
    { 
     get { return _maximum; } 
     set { _maximum = value; OnPropertyChanged(); } 
    } 

    public DoubleCollection TickCollection 
    { 
     get { return _tickCollection; } 
     set 
     { 
      _tickCollection = value; 
      OnPropertyChanged(); 
     } 
    } 

    private void ButtonBase_OnClick(object sender, RoutedEventArgs e) 
    { 
     TickCollection = new DoubleCollection(); 
     for (double i = 5.0; i < 10.0; i += 1.0) 
     { 
      TickCollection.Add(i); 
     } 
     Minimum = 5.0; 
     Maximum = 10.0; 
     Value = 2.3; 

    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    [NotifyPropertyChangedInvocator] 
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

XAML Conterpart:

<Grid> 
    <Slider x:Name="mySlider" Width="400" Height="40" Ticks="{Binding TickCollection}" 
      TickPlacement="TopLeft" 
      Minimum="{Binding Minimum}" 
      Maximum="{Binding Maximum}" 
      Value="{Binding Value,Mode=TwoWay}" 
      ></Slider> 

    <TextBlock Text="{Binding Value}" HorizontalAlignment="Center" Margin="0,20" VerticalAlignment="Top"></TextBlock> 
    <Button Content="Change Ticks" Click="ButtonBase_OnClick" HorizontalAlignment="Center" Margin="0,60" VerticalAlignment="Top"></Button> 
</Grid> 
+0

Спасибо за пятнистость, что. У меня на самом деле были минимальные и максимальные значения привязаны, но я просто забыл уведомить их об обновлении –

Смежные вопросы