我需要包装Windows 窗体DateTimePicker
才能在我的 WPF 3.5 应用程序中使用它。我已经从中做了一个控件:
<UserControl><WindowsFormsHost>
<wf:DateTimePicker x:Name="picker" ValueChanged="DateTimePicker_ValueChanged"/>
</WindowsFormsHost></UserControl>
这是支持代码:
bool suppressUpdates;
public DatePicker()
{
InitializeComponent();
}
private void DateTimePicker_ValueChanged(object sender, EventArgs e)
{
if(!suppressUpdates)
SetValue(SelectedDateProperty, picker.Value);
}
public DateTime SelectedDate
{
get {return (DateTime)GetValue(SelectedDateProperty); }
set
{
suppressUpdates = true;
picker.Value = value;
SetValue(SelectedDateProperty, value);
suppressUpdates = false;
}
}
public static readonly DependencyProperty SelectedDateProperty =
DependencyProperty.Register("SelectedDate", typeof(DateTime),
typeof(DatePicker), new UIPropertyMetadata(DateTime.Now));
然后我在 WPF 窗口中使用它:
<mui:DatePicker Width="300" SelectedDate="{Binding
Path=TheDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
它绑定到启用INotifyPropertyChanged
视图模型。所有其他控件都可以很好地绑定到它,但我的日期时间选取器无法获取视图模型中指定的日期值。但是,它会将其值更改传播回它。
我做错了什么?
好的,这很简单。
private void DateTimePicker_ValueChanged(object sender, EventArgs e)
{
SetValue(SelectedDateProperty, picker.Value);
}
public DateTime SelectedDate
{
get { return (DateTime)GetValue(SelectedDateProperty); }
set { SetValue(SelectedDateProperty, value); }
}
public static readonly DependencyProperty SelectedDateProperty =
DependencyProperty.Register("SelectedDate", typeof(DateTime), typeof(DatePicker), new UIPropertyMetadata(DateTime.Now, textChangedCallback));
private static void textChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
DatePicker input = (DatePicker)d;
input.picker.Value = (DateTime)e.NewValue;
}