简体   繁体   English

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

[英]Set backing nullable DateTime field to null with DatePicker trigger?

I have the following code: 我有以下代码:

<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>

Where MinDate is a property of type DateTime? MinDateDateTime?类型的属性DateTime? .

My issue is that the IsEnabled trigger does not work as I expect. 我的问题是IsEnabled触发器无法按预期工作。 The underlying MinDate field is not changed to null when the DatePicker is disabled. 禁用DatePicker时,基础MinDate字段不会更改为null。

Is this possible? 这可能吗? I could achieve the effect I need by introducing another backing field called IsMinDateEnabled , but I'd rather avoid that if possible. 我可以通过引入另一个支持字段IsMinDateEnabled来达到所需的效果,但如果可能的IsMinDateEnabled ,我宁愿避免这种情况。

    <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.

May have easier solution. 可能有更简单的解决方案。 But it works. 但这有效。

 <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;
            }
        }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM