1

DateTimePickerWPF 3.5 アプリケーションで使用するには、Windows フォームをラップする必要があります。私はそれからコントロールを作りました:

<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ます。他のすべてのコントロールは問題なくバインドされますが、DateTimePicker はビューモデルで指定された日付値を取得しません。ただし、値の変更は反映されます。

私は何を間違っていますか?

4

1 に答える 1

1

わかりました、それは簡単でした。

    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;
    }
于 2012-04-17T09:33:17.573 に答える