2011-11-14 8 views
0

DataGridTemplateColumnでWPF DatePickerが使用されています。 DatePickerは、DateTime型のStartDateという名前のプロパティにバインドされていますか? (Nullable)。 DateTimeピッカーでDateTextを選択して削除し、SelectedDateをnullに設定すると、StartDateプロパティがnullに設定されていません。なぜ、どのようにして日付と同様にソースにNULL値をバインドさせるのか分かっていますか?DatePickerのソースプロパティが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; 
     } 
    } 

編集:私は少し進歩を遂げてきましたが、それはまだ謎です。私が明示的にUpdateSourceTriggerをxamlのPropertyChangedへのバインディングに設定すると、それが動作します。つまり、日付をクリアするとプロパティがnullに設定されます。しかし、PropertyChangedはすでにDatePicker.SelectedDateのためにDefaultUpdateSourceTriggerです。なぜそれが動作を明示的に変更するのですか?xamlで宣言しますか?

+0

を押しました。日付を削除して日付ピッカーからタブを外した場合、選択した日付は変更されますが、選択された日付はバインダーに記録されません – stuicidle

答えて

0

デフォルトのUpdateSourceTriggerはほとんどのバインディングではPropertyChangedですが、DatePicker TextBoxを含むTextBoxも例外の1つです。あなたがテキストの束を入力している場合、あなたは通常、すべてのキーのためのPropertyChangedイベントを起動したくないのでTextBoxため

デフォルトUpdateSourceTriggerは、LostFocusである私は、同様の問題を抱えてい

+0

ありがとうレイチェルですが、フォーカスを失った後、プロパティは更新されません。 – xr280xr

+0

@ xr280xrあなたはそれをデフォルトの動作にしておき、日付を変更してからそれを消去し、別のコントロールをクリックすると値が 'null'ですか? (キープレスを使用してコマンドを処理している場合、 'LostFocus'イベントを引き起こさない) – Rachel

関連する問題