gpt4 book ai didi

wpf - 将 WPF Datepicker 设置为 Null 时出现问题

转载 作者:行者123 更新时间:2023-12-01 11:39:19 25 4
gpt4 key购买 nike

我正在使用 WPF 和 MVVM。我的模型中有一个可以为空的日期时间(日期时间?)的属性。

我的 Xaml 看起来像:

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

我通过文本框和 cobmobox 上的复选框禁用和清除的模式相同,它工作得很好。使用 Datepicker,对于 selecteddate 的 Null 设置不起作用。 UI 和模型都不会更新。 IsEnabled 被设置并且控件变灰,但日期选择器中的值仍然存在。我错过了什么?

更新

所以显然这是一个比我最初想象的更深层次的问题。我认为在文本框和组合框上工作的东西实际上是不工作的(用户界面只是让它看起来那样)。上面代码发生的情况是,您实际上是通过将绑定(bind)设置为 Null 来清除绑定(bind)。我希望它会设置绑定(bind)的值,但事实并非如此。当您使用 setter 时,您实际上是在清除绑定(bind)并将属性设置为 null,这就是模型没有更新的原因。那么为什么下面的代码有效,为什么文本框和组合框“出现”清除自己而日期选择器没有。据我所知,日期选择器“文本框”没有直接连接到 SelectedDate 属性。这就是当它为空或为空时它可以显示“选择日期”并在其他情况下显示日期的方式。换句话说,在设置 SelectedDate 和在文本框中显示文本之间发生了一些神奇的事情。这就是允许“hack”在下面的 xaml 中工作的原因。通过设置文本(而不是 SelectedDate),我并没有清除 SelectedDate 上的绑定(bind),而是使用了 Control 将 Text 属性与 SelectedDate 属性同步的魔法。您可以对 Combobox 执行相同的技巧。但是,对于文本框,您要绑定(bind)的属性是文本属性,似乎没有办法解决这个问题。我对这个控件的解决方法最终是向复选框添加了一个命令,该命令将文本框绑定(bind)值从模型端设置为 null,并绑定(bind)到 IsChecked 属性。如果有人有更好的想法,请在下面发表。

最佳答案

好的,所以我注意到其他一些帖子在谈论从代码隐藏中清除控件时正在谈论设置日期选择器的“文本”。在冰雹玛丽尝试中,我尝试过:

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

而不是“SelectedDate”属性,它按预期工作。我将文本替换回“选择日期”并将 SelectedDate 设置为空。违反直觉,但它有效。

关于wpf - 将 WPF Datepicker 设置为 Null 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23121933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com