WPF Datatrigger设置一个StaticResource转换器

时间:2013-11-28 22:18:23

标签: c# wpf converter

我有一个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>

1 个答案:

答案 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,则会相应地表现出来。 希望你会发现它很有用。