我有Label
我使用DateTime
绑定string
和MultiBinding
。
对于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}我提供的。谢谢你的帮助!
答案 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
数组中值的顺序是绑定顺序。这样,您可以根据输入将所需结果拼接在一起。