我有一个DataTemplate,它包含一个TextEdit(DevExpress组件)。我在TextEdit中加载了三种类型:字符串,整数和日期时间。 当TextEdit显示我希望使用转换器的Datetime时。否则,TextEdit显示原始值(不带转换器)。也许我可以使用DataTrigger,当我的数据类型是DateTime时,使用Setter来设置DatetimeConverter。但是我怎么能实现呢?我认为,这很简单,但我不知道如何只为DateTimes设置转换器。
更新
<DataTemplate x:Key="DefaultTemplate">
<dxe:TextEdit Name="TxtNewValue" Grid.Column="0" Margin="0"
HorizontalAlignment="Stretch"
Text="{Binding TargetValue, UpdateSourceTrigger=PropertyChanged}"
Mask="{Binding TargetFieldDescription.fdValidateExp}"
Loaded="FocusTextEditOnLoad"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding TargetFieldType}" Value="{x:Static eva:FieldDataType.Date}">
<Setter TargetName="TxtNewValue" Property="MaskType" Value="DateTime" />
</DataTrigger>
<DataTrigger Binding="{Binding TargetFieldType}" Value="{x:Static eva:FieldDataType.DatTime}">
<Setter TargetName="TxtNewValue" Property="MaskType" Value="DateTime" />
</DataTrigger>
<DataTrigger Binding="{Binding TargetFieldType}" Value="{x:Static eva:FieldDataType.Time}">
<Setter TargetName="TxtNewValue" Property="MaskType" Value="RegEx" />
</DataTrigger>
<DataTrigger Binding="{Binding TargetFieldType}" Value="{x:Static eva:FieldDataType.Num}">
<Setter TargetName="TxtNewValue" Property="MaskType" Value="RegEx" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
答案 0 :(得分:1)
我不确定我是否理解你的问题,但converter
应该有效:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
DateTime dt = new DateTime();
if (DateTime.TryParse(value.ToString(), out dt))
{
return "it's a date";
}
else
{
return "not a date";
}
}
我这样使用它:
<TextBox x:Name="txt1"/>
<TextBox x:Name="txt2" Text="{Binding ElementName=txt1, Path=Text, Converter={StaticResource dateConverter}}"/>
因此,如果Text property
的{{1}}可以解析为txt1
DateTime
,则会相应地表现出来。
希望你会发现它很有用。