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>

再次感谢您的帮助。

DatePicker转换器不工作

确保您的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;
}

简单!