我需要提供日期范围滑块(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对象
答案 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(); }
}
答案 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();