C# 滑块多次完全更改刻度

C# 滑块多次完全更改刻度,c#,wpf,xaml,binding,slider,C#,Wpf,Xaml,Binding,Slider,我有一个滑块绑定到具有一组值的DoubleCollection Ticks(通过Ticks=“{Binding Ticks}”)上。Ticks集合最终会被清除,并用完全不同的值填充。问题是,重新填充后,滑块仍按旧刻度移动,即使集合中的值已经不同 如何解决这个问题 滴答声集合似乎不依赖于最小值和最大值 滑块值取决于最小值和最大值,刻度仅为“装饰” 上面的例子应该有用 基本上,在更改tick集合时,我会更改最小值和最大值绑定值,以适应tick集合的最小值和最大值 C部分: public分部类主窗口:

我有一个滑块绑定到具有一组值的DoubleCollection Ticks(通过Ticks=“{Binding Ticks}”)上。Ticks集合最终会被清除,并用完全不同的值填充。问题是,重新填充后,滑块仍按旧刻度移动,即使集合中的值已经不同


如何解决这个问题

滴答声集合似乎不依赖于最小值和最大值

滑块值取决于最小值和最大值,刻度仅为“装饰”

上面的例子应该有用

基本上,在更改tick集合时,我会更改
最小值
最大值
绑定值,以适应tick集合的最小值和最大值

C部分:

public分部类主窗口:窗口,INotifyPropertyChanged
{
私人双重价值;
私人双_最小值;
私人双U最大值;
私人双重收藏(DoubleCollection);;
公共主窗口()
{
初始化组件();
DataContext=this;
TickCollection=新的DoubleCollection();
对于(双i=0.0;i<5.0;i+=0.5)
{
增加(i);
}
最小值=0.0;
最大值=5.0;
数值=2.3;
}
公共双重价值
{
获取{返回_值;}
设置
{
_价值=价值;
OnPropertyChanged();
}
}
公共双最小值
{
获取{return_minimum;}
设置{u minimum=value;OnPropertyChanged();}
}
公共双倍最大值
{
获取{return\u max;}
设置{u max=value;OnPropertyChanged();}
}
公众双票收集
{
获取{return}
设置
{
_收集=价值;
OnPropertyChanged();
}
}
private void按钮base_OnClick(对象发送方,RoutedEventTarget e)
{
TickCollection=新的DoubleCollection();
对于(双i=5.0;i<10.0;i+=1.0)
{
增加(i);
}
最小值=5.0;
最大值=10.0;
数值=2.3;
}
公共事件属性更改事件处理程序属性更改;
[NotifyPropertyChangedInvocator]
受保护的虚拟void OnPropertyChanged([CallerMemberName]字符串propertyName=null)
{
PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(propertyName));
}
}
XAML上下文部分:

    <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>

感谢您的关注。我实际上绑定了最小值和最大值,但我只是忘记了在更新时通知它们
    <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>