我可以将RangeSlider(来自WPF扩展工具包)绑定到ObservableCollection的datetime属性吗?

时间:2016-02-10 18:01:38

标签: c# mvvm data-binding rangeslider

我需要提供日期范围滑块(WPF)。 是否可以将RangeSlider绑定到DateTime中的ObservableCollection属性?

修改 我尝试了以下但没有成功:

        <xctk:RangeSlider HorizontalAlignment="Left" Margin="101,10,0,0" VerticalAlignment="Top" Width="233" Maximum="{Binding MaxRange}" Minimum="{Binding MinRange}"/>

MinRange和MaxRange是我的ViewModel中的DateTime对象

2 个答案:

答案 0 :(得分:0)

没有。 DateTime是值类型,因此是不可变的。并且绑定不能用不同的对象替换集合中索引N处的对象。

绑定可以改变属性的值。这就是他们所做的一切。期。

在您的情况下,如果您希望范围滑块描述一段时间,则需要创建一个具有作为属性公开的起始值和结束值的类。

public class Range : INotifyPropertyChanged
{
    // INPC impl omitted because this is c# like pseudocode
    public double StartTime {get;set;}
    public double EndTime {get;set;}
    public TimeSpan ToTimeSpan() { return YourConversionLogicLol(); }
}
IIRC,范围滑块值是双倍的。由您来定义双值在时间方面的含义,并将UI中绑定的值转换为您需要的值(Range!= DateTime,范围是两个时间点 - start&amp; ;结束,所以你迷惑我)。从那个时代起,或者是sommet,我不知道。

答案 1 :(得分:0)

您可以使用DateTime的OADate。此方法将日期时间转换为双精度值。

Xaml代码:

  <xctk:RangeSlider x:Name="_rangeSlider"


                          Minimum="{Binding StartPointOfSlider, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                          Maximum="{Binding StopPointOfSlider}"
                          LowerValue="{Binding StartTimeOnSlide}"
                          HigherValue="{Binding StopTimeOnSlide}"
                          Step="1"
                          Orientation="Horizontal"
                          LowerThumbBackground="#FFF0F0F0"
                          HigherThumbBackground="#FFF0F0F0"
                          RangeBackground="Transparent"
                          HigherRangeBackground="Transparent"
                          LowerRangeBackground="Transparent">

        </xctk:RangeSlider>

以及背后的代码:

        public double StartTimeOnSlide
    {
        get { return _startTimeOnSlide; }
        set
        {
            Set(() => StartTimeOnSlide, ref _startTimeOnSlide, value);

                SetSelectedGrapHStartIntervalExecute();


        }
    }

    public double StopTimeOnSlide
    {
        get { return _stopTimeOnSlide; }
        set
        {
            Set(() => StopTimeOnSlide, ref _stopTimeOnSlide, value);
            SetSelectedGrapHStopIntervalExecute();
        }
    }

    public double StartPointOfSlider
    {
        get { return _startPointOfSlider; }
        set
        {
            Set(() => StartPointOfSlider, ref _startPointOfSlider, value);
            RaisePropertyChanged();
        }
    }

    public double StopPointOfSlider
    {
        get { return _stopPointOfSlider; }
        set
        {
            Set(() => StopPointOfSlider, ref _stopPointOfSlider, value);
            RaisePropertyChanged();
        }
    }

还有内部部分:

StartTimeOnSlide = StartDateTime.ToOADate();
            StopTimeOnSlide = StopDateTime.ToOADate();