具有DateTime依赖项属性的空引用异常

时间:2014-04-28 12:45:08

标签: wpf xaml datetime dependency-properties

我在其中一个名为“DateRangeSelector”的usercontrol中创建了一个DateTime依赖项属性,并试图在另一个usercontrol(另一个xaml)中使用它。但是获取Null Reference异常。 这是依赖属性注册和强制值回调的代码(我不得不使用强制值回调,因为propertychange不起作用)

public static readonly DependencyProperty TodayDateProperty = DependencyProperty.Register("TodayDate", typeof(DateTime?), typeof(DateRangeSelectorControl),
new PropertyMetadata(null, null, TodayDateChanged));

private static object TodayDateChanged(DependencyObject d, object baseValue)
{
    ((DateRangeSelectorControl)d).TodayDateChanged((DateTime)baseValue);
    return baseValue;
}

以下是使用此控件的XAML:

<DateRangeSelector:DateRangeSelectorControl
    x:Name="DateRangeSelector"
    Grid.Column="1"
    Margin="10 0 0 0"
    HorizontalAlignment="Left"
    VerticalAlignment="Center"
    AutomationProperties.AutomationId="AID_TaskListDateRangeSelector"
    DateRangeUpdatedCmd="{Binding Path=DateRangeSelectionUpdatedCommand}"
    FontSize="{StaticResource TaskListMenuFontSize}"
    RangeOptions="{Binding Path=DateRangeSelectionOptions,
                           Mode=OneTime}"
    SelectedDateRange="{Binding Path=SelectedRange,
                                Mode=TwoWay}"
    Visibility="{Binding Path=ShowFilterOptions,
                         Converter={StaticResource boolToVisibility}}"
    TodayDate="{Binding TodayDate, ElementName=DateRangeSelector}"
/>

但是我在xaml中得到异常:对象引用未设置为对象的实例。 有什么指针吗?

更新:

  

绑定中的“TodayDate”在viewmodel中定义为:

     

公共日期时间? TodayDate {get {return m_TodayDate; }集
  {         m_TodayDate = value;         OnPropertyChanged( “TodayDate”); }}

2 个答案:

答案 0 :(得分:1)

您正在将该属性绑定到自身。

TodayDate="{Binding TodayDate, ElementName=DateRangeSelector}"

这会导致意外行为并可能导致此错误。

此外,在使用可空DayeTime?时,您应该检查:

private static object TodayDateChanged(DependencyObject d, object baseValue)
{
    if (baseValue != null)
    {
        ((DateRangeSelectorControl)d).TodayDateChanged((DateTime)baseValue);
        return baseValue;
   }
}

答案 1 :(得分:0)

如果您打算将TodayDate依赖项属性绑定到viewmodel中的TodayDate属性,则应删除ElementName设置并正确设置DateRangeSelector的{​​{1}}:

DataContext