使用DataTrigger更改TextBlock的样式,并结合MultiBinding

时间:2015-04-24 13:13:36

标签: .net wpf xaml

我有Label我使用DateTime绑定stringMultiBinding。 对于DateTime,我想使用.MinValue检查DataTrigger

这是我当前的代码,我更改Text的{​​{1}}:

TextBlock

如果它等于 <TextBlock > <TextBlock.Text> <MultiBinding StringFormat="{}{0} {1:dd.MM.yyyy} {2:HH:mm:ss}"> <Binding Path="myString" /> <Binding Path="myDate" /> <Binding Path="myDate" /> </MultiBinding> </TextBlock.Text> </TextBlock> ,我希望将日期更改为“ - ”:

DateTime.MinValue

不幸的是我对XAML并不太熟悉。我很乐意看到这两者结合在一起。因此,如果myDate等于DateTime.MinDate,则<TextBlock.Style> <Style TargetType="TextBlock"> <Setter Property="Text" Value="{Binding Path=MyDate, StringFormat=d}" /> <Style.Triggers> <DataTrigger Binding="{Binding MyDate}" Value="{x:Static sys:DateTime.MinValue}"> <Setter Property="Text" Value="-" /> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> 的{​​{1}}会显示TextBox,如果Text中存在实际-,则使用{{1}我提供的。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

或者,您可以MultivalueConverter使用TextBlock

这是一个粗略的例子:

public class MyConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string retVal = "-";

        foreach(var currentValue in values)
        {
            if(currentValue is string)
            {
                retVal = dosomething;
                //break here if you satisfied;
            }
            else if(currentValue is DateTime)
            {
                DateTime theVal = (DateTime)currentValue;
                if(theVal == DateTime.MinValue)
                {
                    retVal = "-";
                }
                else
                {
                    retVal = theVal.ToString("Format here...");
                }
                //break if satisfied
            }

        }
        return retVal;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        return new object[] { Binding.DoNothing, Binding.DoNothing };
    }
}

这是相应的XAML:

<Window.Resources>
    <yourNamespace:MyConverter x:Key="MultiValueConverter" />
</Window.Resources>

<TextBlock.Text>
    <MultiBinding Converter="{StaticResource MultiValueConverter}">
        <Binding Path="myString" />
        <Binding Path="myDate" />
        <Binding Path="myDate" />
    </MultiBinding>
</TextBlock.Text>

将所需的逻辑放入convert方法中。 values数组中值的顺序是绑定顺序。这样,您可以根据输入将所需结果拼接在一起。