5
public class DateTimeConverter : IValueConverter
{
    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (values != null)
        {
            DateTime test = (DateTime) value ;
            string date = test.ToString("d/M/yyyy");
            return (date);
        }
        return string.Empty;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    #endregion
}

DatePicker から日付が選択されると、現在の時刻を取得するようにこのコンバーターを作成しました。文字列 Date では、DatePicker から選択された値を取得しますが、日付だけを取得することはできないようです。Value プロパティに入力される形式は 2013 年 9 月 24 日 12:00:00 ですが、2013 年 9 月 24 日にしたいと思います。datetime converter WPFで既に同様の質問をしましたが、提供された回答はどれも機能しませんでした。同じエラーが表示されます:指定されたキャストは無効です。

4

2 に答える 2

16

これを行うためのコンバーターは必要ありません。in バインディング自体を使用してStringFormat、選択した日時をフォーマットし、日付のみを mm/dd/yyyy 形式で表示できます。

<TextBlock Text="{Binding Date, StringFormat={}{0:MM/dd/yyyy}}" />

このコードでテストしましたが、正常に動作しています。XAML:

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding TestList}">
            <DataGrid.Columns>
            <DataGridTemplateColumn Header="Start">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Start, StringFormat=d}" FontFamily="Verdana" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <DatePicker SelectedDate="{Binding Start}" FontFamily="Verdana"  >
                        <DatePicker.CalendarStyle>
                            <Style TargetType="Calendar">
                                <Setter Property="DisplayMode" Value="Month"/>
                            </Style>
                        </DatePicker.CalendarStyle>
                    </DatePicker>
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
        </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>

モデル:

    public class TestData
    {
        DateTime start;
        public DateTime Start
        {
            get { return start; }
            set { start = value; }
        }

    }

ViewModel には、DataGrid にバインドされる TestData のリストがあります。

public List<TestData> TestList { get; set; }
于 2013-09-06T17:03:56.103 に答える