使用DatePicker触发器将支持可为空的DateTime字段设置为null?

时间:2014-09-11 11:06:03

标签: c# wpf xaml

我有以下代码:

<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触发器无法正常工作。当MinDate被禁用时,基础DatePicker字段不会更改为null。

这可能吗?我可以通过引入另一个名为IsMinDateEnabled的支持字段来实现我需要的效果,但是如果可能的话我宁愿避免这种情况。

2 个答案:

答案 0 :(得分: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.

答案 1 :(得分: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;
            }
        }
    }