【问题标题】:DatePicker converters not workingDatePicker 转换器不工作
【发布时间】:2014-09-16 08:16:43
【问题描述】:

我在 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>

再次感谢任何帮助。

【问题讨论】:

  • 转换器返回什么值?
  • 您的输出中是否显示任何绑定错误? StaticResourceDateConverter 声明在哪里?
  • 实际上我得到了它的工作。我会在答案中发布。

标签: c# wpf xaml user-interface datepicker


【解决方案1】:

确保您的ItemSource 中有Date 属性,然后在您的绑定中尝试UpdateSourceTrigger=PropertyChanged,它应该可以工作。

 <DatePicker SelectedDate="{Binding Date, Converter={StaticResource DateConverter},UpdateSourceTrigger=PropertyChanged}"/>

【讨论】:

    【解决方案2】:

    好吧,我找到了自己问题的答案。这也不会覆盖默认转换器(如 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;
    }
    

    简单!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-07
      • 2012-10-05
      • 1970-01-01
      相关资源
      最近更新 更多