我在DataGridTemplateColumn中使用了WPF DatePicker。 DatePicker绑定到DateTime类型的名为StartDate的属性? (可空)。当我在DateTime选择器中选择DateText并将其删除时,将SelectedDate设置为null,StartDate属性不会设置为null。你知道为什么或如何将null值绑定到源和日期?
编辑:这是我的代码:
<DataGrid x:Name="dgCampaigns"
Grid.Row="1"
RowHeight="22"
AutoGenerateColumns="False"
HeadersVisibility="Column"
CanUserSortColumns="True"
CanUserAddRows="False"
CanUserResizeColumns="True"
CanUserDeleteRows="False"
BorderThickness="1"
VerticalScrollBarVisibility="Auto" HorizontalAlignment="Left" Background="Transparent"
Margin="6,10,6,10" Height="Auto" VerticalAlignment="Top">
<DataGrid.Columns>
<DataGridTextColumn Header="Campaign Name" Binding="{Binding DislayName}" CanUserSort="True" SortMemberPath="DislayName"/>
<DataGridTemplateColumn Header="Families Created After" CanUserSort="False">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DatePicker SelectedDate="{Binding StartDate, }" Visibility="{Binding Path=startDateEnabled, Converter={StaticResource boolVisibilityConverter}}" HorizontalAlignment="Left" VerticalAlignment="Center" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Enabled" CanUserSort="False">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Grid.Column="1" IsChecked="{Binding Enabled}" Tag="{Binding CampaignID}" Checked="CheckBox_Checked" Unchecked="CheckBox_Checked" HorizontalAlignment="Left" VerticalAlignment="Center" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
public System.Nullable<System.DateTime> StartDate {
get {
return this.startDateField;
}
set {
this.startDateField = value;
}
}
编辑:我取得了一些进展,但仍然是一个谜。如果我在我的xaml中绑定到PropertyChanged中显式设置UpdateSourceTrigger,它就可以工作。也就是说,当我清除日期时,它会将属性设置为null。但是,PropertyChanged已经是DatePicker.SelectedDate的DefaultUpdateSourceTrigger所以为什么它将行为更改为明确在xaml中声明它?
答案 0 :(得分:0)
对于大多数绑定,默认UpdateSourceTrigger
为PropertyChanged
,但TextBox(包括DatePicker TextBoxes)是其中一个例外。
UpdateSourceTrigger
的默认TextBox
为LostFocus
,因为如果您输入了大量文字,通常不想为每个密钥触发PropertyChanged事件压