0

您好,我有一个包含几个字段的列表视图,其中一个是名为 DatumNabavke 的日期字段。

public DateTime? DatumNabavke
    {
        get { return _datumNabavke; }
        set { _datumNabavke = value; OnPropertyChanged("DatumNabavke"); }

    }

如您所见,它是一个可为空的日期字段。问题是,虽然它可以为 Null,但当它为 Null 时,它会使用 DateTimeNow 自动保存

if (adress.DatumNabavke == null)
                {
                    oleComd.Parameters[":datumnabavke"].Value = DateTime.Now;
                }

因此,当我创建一个新行并将 DatumNabavke 字段留空时,它应该在我的 ListView 中使用 GridView 显示为今天的日期

<GridViewColumn   Header="Datum Nabavke" DisplayMemberBinding="{Binding DatumNabavke, StringFormat= d}" />

但由于某种原因,这不会发生。我显示的每一行,名称、id、值,都按预期显示,但由于某种原因,日期只是空白。

另一件事,在我的调试输出中,我收到以下错误:

System.Windows.Data 错误:11:后备值“x:Static sys:DateTime.Now”(类型“String”)无法转换为用于“SelectedDate”(类型“Nullable”)1'). BindingExpression:Path=Adress.DatumZaduzenja; DataItem=null; target element is 'DatePicker' (Name='datumZaduzenja'); target property is 'SelectedDate' (type 'Nullable1') FormatException:'System.FormatException: x:Static sys:DateTime.Now 不是 DateTime 的有效值。---> System.FormatException:字符串未被识别为有效的日期时间。在 System.ComponentModel.DateTimeConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfoculture, Object value) 处的 System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles) 处有一个未知单词 --- End of inner异常堆栈跟踪 --- 在 System.ComponentModel.DateTimeConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfoculture, Object value) 在 System.ComponentModel.NullableConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfoculture, Object value) 在 System.Windows.Data.BindingExpressionBase .ConvertValue(对象值,DependencyProperty dp,

如果你们中的任何人可以提供帮助,我将不胜感激。

4

2 回答 2

1

我假设 DatumNabavke 是 ViewModel 中的一个属性,并且该 ViewModel 的集合已经成功绑定到您的 ListView.ItemsSource。你有没有尝试过:

public DateTime? DatumNabavke
{
    get { 
        if( _datumNabavke == null)
             return DateTime.Now;

        return _datumNabavke; 
    }
    set { _datumNabavke = value; OnPropertyChanged("DatumNabavke"); }

}

你没有指定你在哪里调用这段代码

if (adress.DatumNabavke == null) { oleComd.Parameters[":datumnabavke"].Value = DateTime.Now; }

如果在 ViewModel 集合作为 ItemSource 加载之后发生这种情况,则绑定将永远不会起作用,因为这段代码不会引发属性通知。你也可以试试这个:

if (adress.DatumNabavke == null)
{
    oleComd.Parameters[":datumnabavke"].Value = DateTime.Now;
    OnPropertyChanged("DatumNabavke");
}
于 2012-11-23T14:46:24.177 回答
1

您是否尝试过在不同的属性中指定格式,例如

<GridViewColumn Header="Datum Nabavke" DisplayMemberBinding="{Binding DatumNabavke}" StringFormat="{}{0:dd/MM/yyyy}" />
于 2012-11-23T14:25:41.860 回答