2012-04-17 4 views
1

WPF 3.5アプリケーションで使用するには、WindowsフォームDateTimePickerをラップする必要があります。私はそれから制御を作った:WPFでのWindows Formsコントロールのラッピングが正しく機能しない

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ウィンドウでそれを使用します:

<UserControl><WindowsFormsHost> 
<wf:DateTimePicker x:Name="picker" ValueChanged="DateTimePicker_ValueChanged"/> 
</WindowsFormsHost></UserControl> 

、ここでは、バッキング・コードである

<mui:DatePicker Width="300" SelectedDate="{Binding 
Path=TheDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 

それが結合していますINotifyPropertyChangedに対応するビューモデル。他のすべてのコントロールはそれだけで結構ですが、私のDateTimePickerはviewmodelで指定された日付の値を取得しません。ただし、値の変更が反映されます。

私は間違っていますか?

答えて

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; 
    } 
関連する問題