У нас есть пользовательский элемент управления, который имеет свойство «Значение» типа System.Nullable (иначе System.DateTime?). У нас есть объект со свойством «Received» того же типа. Когда мы пытаемся привязать элемент управления к объекту, выдается следующее InvalidCastException :
Неверное приведение из 'System.DateTime' к 'System.Nullable`1 [[System.DateTime, mscorlib, Версия = 2.0.0.0, Культура = нейтральный, PublicKeyToken = b77a5c561934e089]]'.
Вот что мы делаем:
Свойство объекта:
private System.DateTime? _dateTimeReceived;
public System.DateTime? DateTimeReceived
{
get
{
return this._dateTimeReceived;
}
set
{
this._dateTimeReceived = value;
this.OnChanged("DateTimeReceived", value); //Implements INotifyPropertyChanged and fires PropertyChanged event
}
}
Управляющее свойство:
private System.DateTime? _value;
[System.ComponentModel.Category("Behavior")]
[System.ComponentModel.Description("The current date value for this control")]
public new System.DateTime? Value
{
get
{
return this._value;
}
set
{
this._value = value;
}
}
В приложении выдается исключение:
this.dateReceived.DataBindings.Add("Value", this._object, "DateTimeReceived");
Как видите, свойство объекта (this._object.DateTimeReceived) является System.DateTime? Тип и свойство элемента управления (this.dateReceived.Value) является System.DateTime? типа.
Почему это может вызвать InvalidCastException ? И как мы можем исправить это так, чтобы оно правильно связывалось?
Обновление 2009-10-29 14:26 CDT:
Вот трассировка стека:
в System.Convert.DefaultToType (IConvertible значение, тип targetType,
Провайдер IFormatProvider)
в
System.DateTime.System.IConvertible.ToType (Тип тип, IFormatProvider
провайдер)
в System.Convert.ChangeType (значение объекта, тип
ConversionType, провайдер IFormatProvider)
в
System.Windows.Forms.Binding.FormatObject (значение объекта)
в
System.Windows.Forms.Binding.PushData (логическая сила)
в
System.Windows.Forms.Binding.UpdateIsBinding ()
в
System.Windows.Forms.Binding.CheckBinding ()
в
System.Windows.Forms.Binding.SetListManager (BindingManagerBase
bindingManagerBase)
в
System.Windows.Forms.ListManagerBindingsCollection.AddCore (Binding
привязка данных)
в
System.Windows.Forms.BindingsCollection.Add (привязка привязки)
в
System.Windows.Forms.BindingContext.UpdateBinding (BindingContext
newBindingContext, Bindinginding)
в
System.Windows.Forms.Binding.SetBindableComponent (IBindableComponent
значение)
при
System.Windows.Forms.ControlBindingsCollection.AddCore (Binding
привязка данных)
при
System.Windows.Forms.BindingsCollection.Add (привязка привязки)
в
System.Windows.Forms.ControlBindingsCollection.Add (String
propertyName, объект dataSource, строка dataMember, логическое значение
formattingEnabled, DataSourceUpdateMode updateMode, Object nullValue,
String formatString, IFormatProvider formatInfo)
в
System.Windows.Forms.ControlBindingsCollection.Add (String
propertyName, ObjectSource, String dataMember)