2014-04-16 2 views
3

WPF 및 MVVM을 사용하고 있습니다. 내 모델에는 nullable Datetime (Datime?) 속성이 있습니다. 나는 텍스트 상자와 cobmobox에 체크 박스를 통해 같은 해제의 패턴과 청소를하고 잘 작동WPF Datepicker를 Null로 설정하는 문제

<CheckBox Grid.Row="0" Grid.Column="2" x:Name="ChkBoxFromDate" 
      Margin="10,0,0,5" FontWeight="Bold"> 
    Orders with Trades After Date: 
</CheckBox> 
<DatePicker Grid.Row="1" Grid.Column="2" Margin="10,0,0,0" 
      SelectedDate="{Binding FromDate}" HorizontalContentAlignment="Stretch"> 
    <DatePicker.Style> 
     <Style TargetType="{x:Type DatePicker}"> 
      <Setter Property="SelectedDate" Value="{Binding Path=FromDate, Mode=TwoWay}" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding ElementName=ChkBoxFromDate, Path=IsChecked}" Value="false"> 
        <Setter Property="SelectedDate" Value="{x:Null}" /> 
        <Setter Property="IsEnabled" Value="false" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </DatePicker.Style> 
</DatePicker> 

: 같은

내 XAML 보인다. Datepicker를 사용하면 selecteddate에 대한 Null 설정이 작동하지 않습니다. UI도 모델도 업데이트되지 않습니다. IsEnabled가 설정되고 컨트롤 회색은 꺼지지만 datepicker의 값은 그대로 유지됩니다. 내가 뭘 놓치고 있니?

업데이트

그래서 분명히 이것은 내가 처음에 생각했던 것보다 더 깊은 문제입니다. 내가 텍스트 박스에서 작업하고 있다고 생각했던 것과 콤보 박스가 실제로 작동했다면 (UI가 그렇게 보일 뿐이었다). 위의 코드에서 실제로 발생하는 문제는 Null로 바인딩을 지우는 것입니다. 바인딩의 가치를 설정하는 것이 좋겠지 만, 그렇지 않습니다. setter를 사용할 때 실제로 바인딩을 지우고 null로 속성을 설정하므로 모델이 업데이트되지 않습니다. 그렇다면 왜 아래의 코드가 작동하고 왜 텍스트 상자와 콤보 상자가 자신을 지우는 데 '나타나지'않았고 datepicker는 그렇지 않은 것입니까? 내가 말할 수있는 한 datepicker 'textbox'는 SelectedDate 속성에 직접 연결되어 있지 않습니다. 이것은 그것이 "비어 있거나 비었을 때"날짜 선택 "을 표시 할 수있는 방법이며 그렇지 않은 경우 날짜를 표시합니다. 즉, SelectedDate를 설정하고 텍스트 상자에 텍스트를 표시하는 것 사이에 몇 가지 마술이 발생합니다. 이것은 아래의 xaml에서 '해킹'이 작동하도록 허용하는 것입니다. SelectedDate 대신 텍스트를 설정하면 SelectedDate에서 바인딩을 지우는 것이 아니라 Control이 Text 속성을 SelectedDate 속성과 동기화하는 마법을 사용하는 것입니다. 콤보 박스 (Combobox)에서도 같은 트릭을 사용할 수 있습니다. 그러나 텍스트 상자의 경우 바인딩 할 속성이 텍스트 속성이므로이 문제를 해결할 방법이없는 것으로 보입니다. 이 컨트롤에 대한 내 주위에 일을 모델 끝 및 IsChecked 속성에 바인딩에서 null 텍스트 상자 바인딩 값을 설정하는 확인란을 명령을 추가하는 끝났다. 누구든지 더 좋은 아이디어가 있다면 아래에 게시하십시오.

답변

4

좋아요, 그렇기 때문에 코드 숨김에서 컨트롤을 지우는 것에 대해 이야기 할 때 데이트 피커의 "텍스트"설정에 대해 이야기하는 다른 게시물을 보았습니다. 우박 메리 시도에서 나는 시도했다 :

<Setter Property="Text" Value="{x:Null}" /> 

"SelectedDate"속성 대신 및 의도 한대로 작동합니다. 텍스트를 "날짜 선택"으로 바꾼 다음 SelectedDate를 null로 설정합니다. 반 직관이지만 작동합니다.

관련 문제