DatePicker转换器不工作
本文关键字:工作 转换器 DatePicker | 更新日期: 2023-09-27 18:21:57
我在DataGrid中有一个DatePicker。我在DatePicker上也有一些转换器。转换器没有着火。我认为这是因为DatePicker有自己的验证/转换器。有人能帮我吗?
这是我的代码:
<UserControl x:Class="RemoteTasks.Controls.TimecardEntry"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d" Name="uiTimecardEntry"
d:DesignHeight="150" d:DesignWidth="550">
<Grid>
<Grid.Resources>
<ResourceDictionary Source="/RemoteTasks;component/Resources.xaml"/>
</Grid.Resources>
<DataGrid Name="uiDataGrid" Background="{x:Null}" BorderBrush="{x:Null}" ItemsSource="{Binding Source={StaticResource TimecardDetailsCVS}}" AutoGenerateColumns="False"
GridLinesVisibility="Horizontal" AlternationCount="2" RowBackground="#11000000" RowHeight="30"
AlternatingRowBackground="#00000000" HorizontalGridLinesBrush="#00000000" HeadersVisibility="Column" DataContextChanged="uiDataGrid_DataContextChanged">
<DataGrid.Columns>
<DataGridTextColumn Width="60" Header="Id" Binding="{Binding Id}"/>
<DataGridTemplateColumn Width="150" Header="Date" SortMemberPath="Date">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DatePicker SelectedDate="{Binding Date, Converter={StaticResource DateConverter}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Start Time" Binding="{Binding StartTime, Converter={StaticResource TimeConverter}}"/>
<DataGridTextColumn Header="Stop Time" Binding="{Binding StopTime, Converter={StaticResource TimeConverter}}"/>
<DataGridTextColumn Header="Hours" Binding="{Binding Hours}"/>
<DataGridTextColumn Width="*" Header="Description" Binding="{Binding Description}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
再次感谢您的帮助。
确保您的ItemSource
中有Date
属性,然后在绑定中尝试UpdateSourceTrigger=PropertyChanged
,它应该可以工作。
<DatePicker SelectedDate="{Binding Date, Converter={StaticResource DateConverter},UpdateSourceTrigger=PropertyChanged}"/>
好吧,我找到了自己问题的答案。这也不会覆盖默认的转换器(比如9/9将成为2014年9月9日)。但当有一种格式时,它不知道它会触发名为DateValidationError
的事件,然后在代码后面,我只调用转换器中的ConvertBack。这是我的代码:
XAML:
<DatePicker SelectedDate="{Binding Date}" DateValidationError="DatePicker_DateValidationError"/>
代码隐藏:
private void DatePicker_DateValidationError(object sender, DatePickerDateValidationErrorEventArgs e)
{
var converter = new DateConverter();
var value = converter.ConvertBack(e.Text, typeof(DateTime?), null, CultureInfo.CurrentCulture) as DateTime?;
if (value != null)
((DatePicker)sender).SelectedDate = value;
}
简单!