2014-09-11 95 views
1

我有以下代码:使用DatePicker触发器将可以为空的DateTime字段设置为null?

<CheckBox Name="MinDateCheck"></CheckBox> 
<DatePicker IsEnabled="{Binding ElementName=MinDateCheck, Path=IsChecked}"> 
    <DatePicker.Style> 
     <Style TargetType="{x:Type DatePicker}"> 
      <Setter Property="SelectedDate" Value="{Binding MinDate}" /> 
      <Style.Triggers> 
       <Trigger Property="IsEnabled" Value="False"> 
        <Setter Property="SelectedDate" Value="{x:Null}" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </DatePicker.Style> 
</DatePicker> 

哪里MinDateDateTime?类型的属性。

我的问题是,IsEnabled触发器无法正常工作。当DatePicker被禁用时,底层MinDate字段不会更改为空。

这可能吗?通过引入另一个名为IsMinDateEnabled的支持字段,我可以达到我需要的效果,但如果可能,我宁愿避免。

回答

1

可能有更简单的解决方案。但它的工作。

<CheckBox Name="MinDateCheck" IsChecked="{Binding MinDate, Converter={StaticResource DateTimeConverter}, Mode=OneWayToSource}"></CheckBox> 
    <DatePicker IsEnabled="{Binding ElementName=MinDateCheck, Path=IsChecked}" 
       SelectedDate="{Binding MinDate}"> 
     <DatePicker.Style> 
      <Style TargetType="{x:Type DatePicker}"> 

       <Style.Triggers> 
        <Trigger Property="IsEnabled" Value="False"> 
         <Setter Property="SelectedDate" Value="{x:Null}" /> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </DatePicker.Style> 
    </DatePicker> 

class DateTimeConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      if (!(bool)value) 
      { 
       return null; 
      } 
      else 
      { 
       return DependencyProperty.UnsetValue; 
      } 
     } 
    } 
+0

谢谢,这真是个好主意。我没有想到这样做。 – Oliver 2014-09-11 23:47:21

1
<Style TargetType="{x:Type DatePicker}"> 
       <Setter Property="SelectedDate" Value="{Binding MinDate}" /> 
    <Setter Property="IsEnabled" Value="True" /> 

       <Style.Triggers> 
        <Trigger Property="IsEnabled" Value="False"> 
         <Setter Property="SelectedDate" Value="{x:Null}" /> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 

Try to set IsEnabled default value.Some times it works.Try it once. 
相关问题