diff --git a/demo/Ursa.Demo/Pages/DatePickerDemo.axaml b/demo/Ursa.Demo/Pages/DatePickerDemo.axaml
index 0319ad6..c42e019 100644
--- a/demo/Ursa.Demo/Pages/DatePickerDemo.axaml
+++ b/demo/Ursa.Demo/Pages/DatePickerDemo.axaml
@@ -3,6 +3,8 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:u="https://irihi.tech/ursa"
+ xmlns:viewModels="clr-namespace:Ursa.Demo.ViewModels"
+ x:DataType="viewModels:DatePickerDemoViewModel"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Ursa.Demo.Pages.DatePickerDemo">
@@ -10,5 +12,9 @@
+
+
+
+
diff --git a/demo/Ursa.Demo/ViewModels/DatePickerDemoViewModel.cs b/demo/Ursa.Demo/ViewModels/DatePickerDemoViewModel.cs
index f77041c..693ab0f 100644
--- a/demo/Ursa.Demo/ViewModels/DatePickerDemoViewModel.cs
+++ b/demo/Ursa.Demo/ViewModels/DatePickerDemoViewModel.cs
@@ -1,6 +1,28 @@
-namespace Ursa.Demo.ViewModels;
+using System;
+using System.ComponentModel;
+using CommunityToolkit.Mvvm.ComponentModel;
-public class DatePickerDemoViewModel
+namespace Ursa.Demo.ViewModels;
+
+public partial class DatePickerDemoViewModel: ObservableObject
{
-
+ [ObservableProperty] private DateTime? _selectedDate;
+ [ObservableProperty] private DateTime? _startDate;
+ [ObservableProperty] private DateTime? _endDate;
+
+ public DatePickerDemoViewModel()
+ {
+ SelectedDate = DateTime.Today;
+ StartDate = DateTime.Today;
+ EndDate = DateTime.Today.AddDays(7);
+ }
+
+ protected override void OnPropertyChanged(PropertyChangedEventArgs e)
+ {
+ base.OnPropertyChanged(e);
+ if (e.PropertyName == nameof(SelectedDate))
+ {
+
+ }
+ }
}
\ No newline at end of file
diff --git a/src/Ursa/Controls/DateTimePicker/DatePicker.cs b/src/Ursa/Controls/DateTimePicker/DatePicker.cs
index a239cc2..06a1296 100644
--- a/src/Ursa/Controls/DateTimePicker/DatePicker.cs
+++ b/src/Ursa/Controls/DateTimePicker/DatePicker.cs
@@ -52,16 +52,7 @@ public class DatePicker: DatePickerBase, IClearControl
private void OnSelectionChanged(AvaloniaPropertyChangedEventArgs args)
{
- if (args.NewValue.Value is null)
- {
- _calendar?.ClearSelection();
- _textBox?.Clear();
- }
- else
- {
- _calendar?.MarkDates(startDate: args.NewValue.Value, endDate: args.NewValue.Value);
- _textBox?.SetValue(TextBox.TextProperty, args.NewValue.Value.Value.ToString(DisplayFormat ?? "yyyy-MM-dd"));
- }
+ SyncSelectedDateToText(args.NewValue.Value);
}
protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
@@ -91,6 +82,7 @@ public class DatePicker: DatePickerBase, IClearControl
{
_calendar.DateSelected += OnDateSelected;
}
+ SyncSelectedDateToText(SelectedDate);
}
private void OnDateSelected(object? sender, CalendarDayButtonEventArgs e)
@@ -121,6 +113,20 @@ public class DatePicker: DatePickerBase, IClearControl
{
SetSelectedDate(true);
}
+
+ private void SyncSelectedDateToText(DateTime? date)
+ {
+ if (date is null)
+ {
+ _textBox?.SetValue(TextBox.TextProperty, null);
+ _calendar?.ClearSelection();
+ }
+ else
+ {
+ _textBox?.SetValue(TextBox.TextProperty, date.Value.ToString(DisplayFormat ?? "yyyy-MM-dd"));
+ _calendar?.MarkDates(startDate: date.Value, endDate: date.Value);
+ }
+ }
private void SetSelectedDate(bool fromText = false)
{
diff --git a/src/Ursa/Controls/DateTimePicker/DateRangePicker.cs b/src/Ursa/Controls/DateTimePicker/DateRangePicker.cs
index f469c8f..e444504 100644
--- a/src/Ursa/Controls/DateTimePicker/DateRangePicker.cs
+++ b/src/Ursa/Controls/DateTimePicker/DateRangePicker.cs
@@ -165,6 +165,42 @@ public class DateRangePicker : DatePickerBase, IClearControl
_endCalendar.DatePreviewed += OnDatePreviewed;
_endCalendar.ContextDateChanged += OnContextDateChanged;
}
+ SyncDateToText();
+ }
+
+ private void SyncDateToText()
+ {
+ if (SelectedStartDate is not null)
+ {
+ _startTextBox?.SetValue(TextBox.TextProperty, SelectedStartDate.Value.ToString(DisplayFormat ?? "yyyy-MM-dd"));
+ }
+ if (SelectedEndDate is not null)
+ {
+ _endTextBox?.SetValue(TextBox.TextProperty, SelectedEndDate.Value.ToString(DisplayFormat ?? "yyyy-MM-dd"));
+ }
+
+ if (SelectedStartDate is null)
+ {
+ _startCalendar?.ClearSelection();
+ }
+ if(SelectedEndDate is null)
+ {
+ _endCalendar?.ClearSelection();
+ }
+ if(SelectedStartDate is not null && SelectedEndDate is not null)
+ {
+ _startCalendar?.MarkDates(SelectedStartDate, SelectedEndDate);
+ _endCalendar?.MarkDates(SelectedStartDate, SelectedEndDate);
+ }
+ else if(SelectedStartDate is not null)
+ {
+ _startCalendar?.MarkDates(SelectedStartDate, SelectedStartDate);
+ }
+ else if(SelectedEndDate is not null)
+ {
+ _endCalendar?.MarkDates(SelectedEndDate, SelectedEndDate);
+ }
+ PseudoClasses.Set(PseudoClassName.PC_Empty, SelectedStartDate is null && SelectedEndDate is null);
}
private void OnTextBoxLostFocus(object? sender, RoutedEventArgs e)
@@ -381,4 +417,6 @@ public class DateRangePicker : DatePickerBase, IClearControl
SetCurrentValue(IsDropdownOpenProperty, true);
}
+
+
}
\ No newline at end of file