【问题标题】:WPF - How do I use the UserControl with a dependency property and view model?WPF - 如何将 UserControl 与依赖属性和视图模型一起使用?
【发布时间】:2010-04-20 17:31:58
【问题描述】:

我的目标是让用户选择一年和一个月。将选择转换为日期并让用户控件将日期发送回我的视图模型。那部分对我有用....但是,我无法获得 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" />

如果这个问题得到了回答,那我就错了。我环顾四周,没有看到任何对我有用的东西。因此,当程序加载时,我如何从视图模型中获取值到方法中以设置组合框?

谢谢,

-斯科特

【问题讨论】:

    标签: c# wpf wpf-controls user-controls dependency-properties


    【解决方案1】:

    当您使用依赖属性时,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);
    }
    

    【讨论】:

    • 感谢您的快速回复,d.SetDropDowns 应该是 intance.SetDropDowns 并且回调的名称应该是 dateChanged。 (我只为未来的读者指出这一点)。再次感谢。
    • @BlargINC:我更正了 - 抱歉 - 当我尝试在这里快速输入时有时会发生这种情况;)这是否解决了您的问题?如果是这样,您应该将其标记为答案(小复选标记 - 我只提到,因为您是新用户;))
    • @ReedCopsey 谢谢里德。您显示使用正确配置的 FrameworkPropertyMetadata 参数的示例解决了我遇到的麻烦的数据绑定问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多