يعين DatePicker ربط البيانات القيمة الافتراضية إلى 1/1/0001 WPF ج #

لدي DatePicker منضمة إلى DataTime داخل كائن ، وفي وقت التشغيل ، بدلاً من السلسلة "تحديد تاريخ" في DatePicker ، يتم عرض "1/1/0001" ، مما يجعل من الصعب استخدام التقويم الفعلي. لم يكن لدي مشكلة عندما كنت ملزمة DatePicker مع سلسلة ، ولكن تغييره إلى DateTime فعل هذا. واسمحوا لي أن أعرف كيف يعمل هذا. هذا ما لدي حتى الآن:

في XAML لدي:


    
        
            
                
            
        
    

في C# لدي:

public DateTime DueDate
{
    get { return dueDate; }
    set
    {
        if (DueDate != null) || !DueDate.Equals(value))
        {
            dueDate = value;
            OnPropertyChanged("DueDate");
        }
    }
}

لدي أيضًا مجموعة خاصية تبعية ، لست متأكدًا مما إذا كان هذا يلعب جزءًا:

public static readonly DependencyProperty DueDateProperty =
        DependencyProperty.Register("DueDate", typeof(DateTime),
        typeof(UpdateJobDialog), new PropertyMetadata(DateTime.Now));
0

3 إجابة

ربما يساعد على استخدام DateTime؟ بدلاً من DateTime ، نظرًا لأن DateTime ليس فارغًا ، فأنت تقوم بتعيين القيمة الافتراضية لـ 1/1/0001 ، بدلاً من null الذي ينتج عنه الرجاء تحديد رسالة تاريخ تستخدمها.

public DateTime? DueDate
{
    //Need to change the type of the private variable as well
    get { return dueDate; }
    set
    {
        if (DueDate != null) || !DueDate.Equals(value))
        {
            dueDate = value;
            OnPropertyChanged("DueDate");
        }
    }
}
0
وأضاف
يعمل إذا كان الحقل خاليًا. ماذا لو كان الحقل غير فارغ؟
وأضاف المؤلف Dani, مصدر
عملت بشكل جيد ، شكرا لك!
وأضاف المؤلف Erika, مصدر

أنت لا تربط خاصية التبعية DueDateProperty بالخاصية DueDate . جرب هذا بدلا من ذلك:

public DateTime DueDate
{
    get { return (DateTime)GetValue(DueDateProperty); }
    set { SetValue(DueDateProperty, value); }
}
0
وأضاف

لقد واجهت نفس المشكلة مع خاصية تاريخ الربط التي كان لها قيمة فارغة ل datepicker. بغض النظر عن ما حاولت القيمة المعروضة كان 01/01/0001. أنا أخيرا إصلاح هذا عن طريق إعداد خاصية ثانية كسلسلة خاصة لربط التاريخ xaml ، وإذا كان تاريخ بلاى ثم أعيد string.empty

هذا حلها ... (رمز في VB)

Public Property ClosedDateDTP() As String
    Get
        If _closedDate = Nothing Then
            Return String.Empty
        Else
            Return _closedDate.ToString
        End If
    End Get
    Set(value As String)
        If value = Nothing Then
            _closedDate = Nothing
        Else
            _closedDate = CDate(value)
        End If
    End Set
End Property

XAML datepicker code ...

        
    
0
وأضاف