1

我的屏幕上有两个 RadioButtons 和一个 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>

我想,我需要分配某种转换器,但不知道该怎么做。

4

1 回答 1

0

该属性TimePicker.Value一次只能设置为一个值:指向指向active_end_date或静态日期时间字符串的绑定"01-01-0001 PM 05:00:00"。在触发器中将其设置为字符串将无法更新绑定值,因为它会替换绑定而不是更新绑定。

您需要做的是将您的复选框的IsChecked属性绑定到您的某些内容,并处理它的事件以将 设置为您想要的值。DailyFreqGroupRadioDataContextPropertyChangedactive_end_date

这实际上是更好的 MVVM 设计,因为您应该ViewModel对您的.ViewViewModelView

例如,

<CheckBox IsChecked="{Binding daily_freq_checked}" ... />
<xctk:TimePicker Value="{Binding Path=active_end_date}" ... />

在你的代码后面

void MyViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName == "daily_freq_checked" && daily_freq_checked)
    {
        active_end_date = "01-01-0001 PM 05:00:00";
    }
}

还应该注意,您当前的 XAML 不会触发,DataTrigger因为根据Dependency Property Precedence List,在 XAML 中本地设置的值将优先于样式中的触发值,因此您的触发值将永远不会被应用.

于 2013-11-08T21:12:37.020 回答