【问题标题】:Dependent DependencyProperty依赖依赖属性
【发布时间】:2016-01-29 19:25:37
【问题描述】:

我想创建一个依赖属性,它的值依赖于其他依赖属性,但仍然是可设置/可写的。例如,‘DateOfBirth’是一个独立的DependencyProperty。现在我想创建另一个名为 YearOfBirth 的 DependencyProperty。当 DateOfBirth 带有 Change 时,它​​将强制 YearOfBirth 属性的值。即 d.CoerceValue(YearOfBirthProperty)。

但是如何使依赖依赖属性(例如 YearOfBirth)可写/可设置?

如果我使用 CLR 属性进行编码,它可以正常工作,但使用依赖属性怎么办!

【问题讨论】:

标签: wpf data-binding dependency-properties


【解决方案1】:

这个呢:

    public partial class MainWindow : Window
{
    public static DependencyProperty DateofBirthProperty = DependencyProperty.Register("DateofBirth", typeof(DateTime), typeof(MainWindow), new FrameworkPropertyMetadata(new PropertyChangedCallback(DateofBirth_Changed)));

    public DateTime DateofBirth
    {
        get { return (DateTime)GetValue(DateofBirthProperty); }
        set { SetValue(DateofBirthProperty, value); }
    }


    private static void DateofBirth_Changed(DependencyObject o, DependencyPropertyChangedEventArgs args)
    {
        MainWindow thisClass = (MainWindow)o;
        thisClass.SetDateofBirth();
    }

    private void SetDateofBirth()
    {
        DOBYear = DateofBirth.Year;
    }

    public static DependencyProperty DOBYearProperty = DependencyProperty.Register("DOBYear", typeof(int), typeof(MainWindow), new FrameworkPropertyMetadata(new PropertyChangedCallback(DOBYear_Changed)));

    public int DOBYear
    {
        get { return (int)GetValue(DOBYearProperty); }
        set { SetValue(DOBYearProperty, value); }
    }


    private static void DOBYear_Changed(DependencyObject o, DependencyPropertyChangedEventArgs args)
    {
        MainWindow thisClass = (MainWindow)o;
        thisClass.SetDOBYear();
    }

    private void SetDOBYear()
    {
        //Put Instance DOBYear Property Changed code here
    }


    public MainWindow()
    {
        InitializeComponent();
    }
}

【讨论】:

  • 感谢您的回复;在这种方法中,我们实际上创建了两个独立的属性,它们在更改时会相互更改。另一方面,我正在寻找一种方式,其中 YearOfBirth 不将其值存储在 RAM 中,因为它是计算值,而是根据需要从 DateOfBirth 中计算。显然,当用户尝试更改 YearOfBirth 时,它会更新 DateOfBirth。