我的目标是让用户选择一年和一个月。将选择内容转换为日期,并让用户控件将日期发送回我的视图模型。那部分对我有用......但是,我无法获得ViewModel的初始日期来设置这些下拉菜单。
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(value)只是在组合框上设置选定的项目,但程序永远不会使用该方法。
在我正在使用的视图上:
<cc1:DatePicker ReturnDate="{Binding Path=StartDate, Mode=TwoWay}" IsStart="True" />
如果这已经回答了,那我就不好了。我环顾四周,没有看到任何对我有用的东西。因此,当程序加载时如何从视图模型中获取值以设置组合框?
谢谢,
-Scott
答案 0 :(得分: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);
}