是否可以将 RangeSlider(来自 WPF 扩展工具包)绑定到 ObservableCollection 的日期时

本文关键字:绑定 ObservableCollection 日期 工具包 扩展 RangeSlider WPF 来自 是否 | 更新日期: 2023-09-27 18:34:14

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

编辑:我尝试了以下方法,但没有成功:

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

最小范围和最大范围是我的视图模型中的日期时间对象

是否可以将 RangeSlider(来自 WPF 扩展工具包)绑定到 ObservableCollection 的日期时

No. 日期时间是一种值类型,因此是不可变的。 绑定不能将集合中索引 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 中绑定的值转换为您需要的任何值(范围 != DateTime,范围是时间上的两个点 - 开始和结束,所以你让我感到困惑)。 来自时代的蜱虫,或者来自 sommet,我不知道。

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

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