UserControl 依赖项属性 绑定到 ViewModel 时值始终为 0 属性

UserControl DependencyProperty Value always 0 when bound to ViewModel Property

我有一个带有 3 个依赖属性的简单 UserControl。日、月、年。

public static readonly DependencyProperty DayProperty = DependencyProperty.Register("Day", typeof(int), typeof(BoardPanel), new FrameworkPropertyMetadata(0));
public int Day
{
    get { return (int)GetValue(DayProperty); }
    set { SetValue(DayProperty, value); }
}

public static readonly DependencyProperty MonthProperty = DependencyProperty.Register("Month", typeof(int), typeof(BoardPanel), new FrameworkPropertyMetadata(0));
public int Month
{
    get { return (int)GetValue(MonthProperty); }
    set { SetValue(MonthProperty, value); }
}

public static readonly DependencyProperty YearProperty = DependencyProperty.Register("Year", typeof(int), typeof(BoardPanel), new FrameworkPropertyMetadata(0));
public int Year
{
    get { return (int)GetValue(YearProperty); }
    set { SetValue(YearProperty, value); }
}

和另一个字符串 属性 DayOfWeek.

public string DayOfWeek
{
    get { return new DateTime(Year, Month, Day).DayOfWeek.ToString(); }
}

Day 和 DayOfWeek 属性绑定到 XAML 中的两个文本框。

使用此 UserControl 并手动设置所有值时一切正常。

<c:DatePanel Day="1" Month="4" Year="2022"/>

当将这些绑定到我的 ViewModel 的属性时,它会抛出异常并显示月份和年份为 0。

<c:DatePanel Day="2" Month="{Binding Month}" Year="{Binding Year}"/>

System.ArgumentOutOfRangeException: "Year, Month, and Day parameters describe an un-representable DateTime."

我对这个话题很陌生,但我假设在控件初始化或其他事情时绑定尚未解决?

你会如何正确地做到这一点?

显然你的绑定不起作用。

原因是你已经显式地将UserControlDataContext设置为自身,这有效地阻止了它从其父元素继承DataContext并绑定到的属性它。

不要这样做:

this.DataContext = this;

每当 DayMonthYear 属性 已设置,但我在您的代码中看不到 PropertyChangedCallback