DatePicker源属性未更新为null

时间:2011-11-14 22:21:29

标签: wpf datagrid datepicker

我在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中声明它?

1 个答案:

答案 0 :(得分:0)

对于大多数绑定,默认UpdateSourceTriggerPropertyChanged,但TextBox(包括DatePicker TextBoxes)是其中一个例外。

UpdateSourceTrigger的默认TextBoxLostFocus,因为如果您输入了大量文字,通常不想为每个密钥触发PropertyChanged事件压