【发布时间】:2013-11-20 18:19:12
【问题描述】:
我的屏幕上有两个 RadioButton 和一个 TimePicker 控件。对于 TimePicker,active_end_Date 是 DataContext 中的一个属性,其值是从 TimePicker 值属性设置的。 如果选中了两个 RadioButton 之一,我想将 TimePicker 的 Value 属性设置为 23:59:59,这反过来应该更新我的 DataContext 值。
<RadioButton Content="Occurs at once: " FontSize="18" GroupName="DailyFreqGroup" Name="DailyFreqGroupRadio1"/>
<xctk:TimePicker Name="EndTimeTextBoxDailyFreq" Value="{Binding Path=active_end_date, Mode=TwoWay, Converter={StaticResource TimeConverter}
, ConverterParameter='active_end_date'}" HorizontalAlignment="Left" Margin="2" MinWidth="100" Format="LongTime">
<xctk:TimePicker.Style>
<Style TargetType="{x:Type xctk:TimePicker}">
<Setter Property="Value" Value="01-01-0001 PM 11:00:00"></Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsChecked, ElementName=DailyFreqGroupRadio1}" Value="True">
<Setter Property="Value" Value="01-01-0001 PM 05:00:00">
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</xctk:TimePicker.Style>
</xctk:TimePicker>
我想,我需要分配某种转换器,但不知道该怎么做。
【问题讨论】:
-
问题是什么?该解决方案不起作用吗?
-
您的
DataTrigger正在用静态DateTime字符串替换存储在TimePicker.Value中的绑定。更好的解决方案是绑定DailyFreqGroupRadio的IsChecked属性,并且每当该属性在ViewModel 中发生变化时,更新active_end_date属性 -
@devhedgehog:是的,这段代码不起作用。我期待在 TimePicker 中看到这个时间,但它没有被设置。
-
@Rachel:正在发生逆转。绑定正在替换 DataTrigger 设置的静态值。我通过从 TimePicker.Value 中删除 Binding 来确认它
-
@ShantanuGupta 根据Dependency Property Precedence List,在 XAML 中设置的本地值会覆盖通过样式触发器设置的任何设置。如果您将
Value属性设置为样式设置器中的绑定,则触发器将是最后一个应用的触发器。不过需要注意的是,您的触发器会更新TimePicker.Value属性,并且不会更新它所绑定的active_end_date属性。
标签: c# wpf data-binding wpftoolkit