1

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));
    }

}
4

1 回答 1

2

这是因为你需要BindingMode=TwoWay在你Binding的 s.

作者Control可以将此作为默认行为(WPF 会这样做Slider),但除非依赖属性已注册到FrameworkPropertyMetadata.BindsTwoWayByDefaultOneWay否则将使用该模式。

MSDN解释BindingModes。

于 2013-08-08T15:37:55.160 回答