是否可以将 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}"/>
最小范围和最大范围是我的视图模型中的日期时间对象
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();