예, 속성을 재정의하고 다른 유형으로 변환하는 것이 가능하지만 해결책은 조금 까다 롭습니다. 문제는 원래 SelectedDate를 숨기면 새로운 것이 변경되지 않으며 그 반대도 마찬가지입니다.
using System;
using System.Windows;
using System.Windows.Controls;
public class OffsetedDatePicker : DatePicker
{
public new DateTimeOffset? SelectedDate
{
get { return (DateTimeOffset)GetValue(SelectedDateOffProperty); }
set { SetValue(SelectedDateOffProperty, value); }
}
public static readonly DependencyProperty SelectedDateOffProperty =
DependencyProperty.Register(nameof(SelectedDate), typeof(DateTimeOffset?), typeof(OffsetedDatePicker), new PropertyMetadata(null, SelectedDateOffChanged));
private static void SelectedDateOffChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var odp = d as OffsetedDatePicker;
if (odp==null) { return; }
(d as DatePicker).SelectedDate = odp.SelectedDate.HasValue ? odp.SelectedDate.Value.Date : (DateTime?)null;
}
public OffsetedDatePicker()
{
SelectedDateChanged += OffsetedDatePicker_SelectedDateChanged;
}
private void OffsetedDatePicker_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
DateTime? newDate = null;
if (e.AddedItems.Count > 0)
{
newDate = (DateTime)e.AddedItems[0];
}
SetValue(SelectedDateOffProperty, newDate.HasValue ? new DateTimeOffset(newDate.Value) : (DateTimeOffset?)null);
}
}
가 XAML :
<local:OffsetedDatePicker SelectedDate="{Binding Path=YourVMDateTimeOffsetProp, Mode=TwoWay}" />
당신은 아무것도를 시도 여기
은 당신의 통제인가? 'new' 키워드를 사용하여 다른 SelectedDate 속성을 선언 할 수 있습니다. 아마 나쁜 디자인 일지라도 ... – ClemensDP에'object' 유형을 사용하고'CoerceValueCallback'을 사용할 수 있습니다. – AnjumSKhan
변환기와의 바인딩을 사용하는 것이 잘못된 이유는 무엇입니까? 바인딩 + 변환기를 사용하기 위해 사용자 정의 사용자 정의 컨트롤을 작성할 필요가 없습니다. – elgonzo