2011-11-14 5 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; 
     } 
    } 

편집 : 여기 내 코드입니다. 내 xaml에서 PropertyChanged 바인딩에 UpdateSourceTrigger를 명시 적으로 설정하면 작동합니다. 즉, 날짜를 지울 때 속성을 null로 설정합니다. 그러나 PropertyChanged는 이미 DatePicker.SelectedDate에 대해 DefaultUpdateSourceTrigger입니다. 그렇다면이 기능을 명시 적으로 변경하여 xaml에서 선언 할 수 있습니까?

+0

을 누르면 발사 싶지 않기 때문에

TextBox의 기본 UpdateSourceTriggerLostFocus입니다. 날짜를 삭제 한 다음 날짜 선택기에서 탭을 선택하면 선택한 날짜가 변경되지만 선택한 날짜는 선택한 날짜가 – stuicidle

답변

0

대부분의 바인딩에서 기본값 UpdateSourceTriggerPropertyChanged이지만 DatePicker TextBox를 비롯한 TextBox는 예외 중 하나입니다. 텍스트의 무리를 입력하는 경우, 당신은 일반적으로 모든 키의하여 PropertyChanged 이벤트가 나는 비슷한 문제를 겪고

+0

에 바인딩됩니다. 감사합니다. Rachel에게 감사의 말을 전합니다. 초점을 잃은 후에 속성이 업데이트되지 않았습니다. – xr280xr

+0

@ xr280xr 당신이 그것을 디폴트 동작으로 남겨두면 날짜를 변경하고 지우고 다른 컨트롤을 클릭하면 값이 'null'입니까? (키 프레스를 사용하여 명령을 처리하는 경우 'LostFocus' 이벤트가 발생하지 않습니다) – Rachel

관련 문제