2010-04-20 94 views
1

我的目标是让用户选择年份和月份。将选择转换为日期并让用户控件将日期发送回我的视图模型。那部分适合我......但是,我无法获得ViewModel的初始日期来设置这些下拉菜单。WPF - 如何将UserControl与依赖属性和视图模型一起使用?

public static readonly DependencyProperty Date = 
     DependencyProperty.Register("ReturnDate", typeof(DateTime), typeof(DatePicker), 
     new FrameworkPropertyMetadata{BindsTwoWayByDefault = true,}); 

    public DateTime ReturnDate 
    { 
     get { return Convert.ToDateTime(GetValue(Date)); } 
     set 
     { 
      SetDropDowns(value); 
      SetValue(Date, value); 
     } 
    } 

的SetDropDowns(值)只设置在组合框中选定的项目,但是,该方案从未它使该方法。

在视图我使用:

<cc1:DatePicker ReturnDate="{Binding Path=StartDate, Mode=TwoWay}" IsStart="True" /> 

如果这已经回答了,然后我不好。我环顾四周,没有看到为我工作的任何东西。因此,当程序加载时,我如何从视图模型获取值到方法来设置组合框?

感谢,

斯科特

回答

2

当你使用一个依赖属性,(绑定集时的财产)的CLR属性setter是从来没有发射。

正确的方法做,这是对你的依赖属性中使用PropertyChangedCallback

public static readonly DependencyProperty Date = 
    DependencyProperty.Register("ReturnDate", typeof(DateTime), typeof(DatePicker), 
    new FrameworkPropertyMetadata(
     DateTime.Now, 
     FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, 
     new PropertyChangedCallback(dateChanged))); 

public DateTime ReturnDate 
{ 
    get { return Convert.ToDateTime(GetValue(Date)); } 
    set 
    { 
     SetDropDowns(value); 
     SetValue(Date, value); 
    } 
} 

private static void dateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    DatePicker instance = d as DatePicker; 
    instance.SetDropDowns((DateTime)e.NewValue); 
} 
+0

感谢您的快速回复,d.SetDropDowns应intance.SetDropDowns和回调的名称应dateChanged 。 (我只为未来的读者指出)。再次感谢。 – BlargINC 2010-04-20 18:20:35

+0

@BlargINC:我改正了它 - 对不起 - 当我尝试在这里打字的时候,有时会发生这种情况;)这是否纠正了你的问题?如果是这样,你应该把它作为答案(小复选标记 - 我只提到,因为你是一个新用户;)) – 2010-04-20 18:24:29

+0

是的,它的工作。谢谢 – BlargINC 2010-04-20 18:30:34