我在其中一个名为“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”); }}
答案 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