如何调试 setter 不在 Timepicker 属性 上触发?
How to debug setter not firing on Timepicker property?
概览:
我已将时间选择器控件添加到我的 UI 并将时间 属性 绑定到关联 ViewModel 上的日期时间 属性。
但是当我调试解决方案时,setter 不会被调用 属性 SelectedParkDuration
。
为了进一步调试,我检查了 UI 的数据上下文。正确设置了数据上下文并调用了 Timepicker 的 getter。
问题:
有谁知道为什么当我在运行时 select 时间选择器上的值时 setter 没有被调用?
时间选择器控件定义:
<TimePicker Grid.Row="2"
Grid.Column="1"
Width="270"
Height="100"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
Header="Parking Duration"
Time="{Binding SelectedParkDuration}"
/>
时间选择器 属性 - 在 UI 的 ViewModel 中定义的 SelectedParkDuration:
private DateTime _selectedParkDuration;
public DateTime SelectedParkDuration
{
get
{
return this._selectedParkDuration;
}
set
{
if (_selectedParkDuration != value)
{
_selectedParkDuration = value;
RaisePropertyChanged("SelectedParkDuration");
}
}
}
解决方案是按照@Ken Tucker 的建议指定双向绑定。 属性 的类型也需要是 TimeSpan:
类型
private TimeSpan? _selectedParkDuration;
public TimeSpan? SelectedParkDuration
{
get
{
return this._selectedParkDuration;
}
set
{
if (_selectedParkDuration != value)
{
_selectedParkDuration = value;
RaisePropertyChanged("SelectedParkDuration");
}
}
}
Xaml 时间选择器的定义:
<TimePicker Grid.Row="2"
Grid.Column="1"
Width="270"
Height="100"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
Header="Parking Duration"
Time="{Binding SelectedParkDuration,
Mode=TwoWay}" />
概览: 我已将时间选择器控件添加到我的 UI 并将时间 属性 绑定到关联 ViewModel 上的日期时间 属性。
但是当我调试解决方案时,setter 不会被调用 属性 SelectedParkDuration
。
为了进一步调试,我检查了 UI 的数据上下文。正确设置了数据上下文并调用了 Timepicker 的 getter。
问题: 有谁知道为什么当我在运行时 select 时间选择器上的值时 setter 没有被调用?
时间选择器控件定义:
<TimePicker Grid.Row="2"
Grid.Column="1"
Width="270"
Height="100"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
Header="Parking Duration"
Time="{Binding SelectedParkDuration}"
/>
时间选择器 属性 - 在 UI 的 ViewModel 中定义的 SelectedParkDuration:
private DateTime _selectedParkDuration;
public DateTime SelectedParkDuration
{
get
{
return this._selectedParkDuration;
}
set
{
if (_selectedParkDuration != value)
{
_selectedParkDuration = value;
RaisePropertyChanged("SelectedParkDuration");
}
}
}
解决方案是按照@Ken Tucker 的建议指定双向绑定。 属性 的类型也需要是 TimeSpan:
类型 private TimeSpan? _selectedParkDuration;
public TimeSpan? SelectedParkDuration
{
get
{
return this._selectedParkDuration;
}
set
{
if (_selectedParkDuration != value)
{
_selectedParkDuration = value;
RaisePropertyChanged("SelectedParkDuration");
}
}
}
Xaml 时间选择器的定义:
<TimePicker Grid.Row="2"
Grid.Column="1"
Width="270"
Height="100"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
Header="Parking Duration"
Time="{Binding SelectedParkDuration,
Mode=TwoWay}" />