我想为绑定(bind)到 ViewModel 中的属性的 TextBlock 实现“NullText”行为。当 ViewModel 中的该属性为 null 或空时,我想显示类似“No Data”的灰色斜体文本。我希望它遵循 MVVM 模式,但我迷路了......
更新 所以在尝试了 James Webster 建议的解决方案之后,我让它像这样工作......
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
<c:NullOrEmptyValueConverter x:Key="NullOrEmptyValueConverter" Text="(No Data)"/>
</UserControl.Resources>
...
<TextBlock Name="SerialNumberTextBlock" Text="{Binding Path=SerialNumber, Converter={StaticResource NullOrEmptyValueConverter}}">
<TextBlock.Resources>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=SerialNumberTextBlock, Path=Text}" Value="(No Data)">
<Setter Property="FontStyle" Value="Italic"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Resources>
</TextBlock>
最佳答案
我建议实现一个IValueConverter
;如果源值不为 null 或为空,则将其传递给 TextBlock。如果源值为 null 或空,则呈现您选择的文本。
public class NullValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string str = (string)value;
if (str.IsNullOrWhitespace())
{
return "No Data";
}
return str;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
... //An empty implementation I expect...
}
}
但是我刚刚意识到您也想设置样式...嗯,如果值是我期望的“无数据”,可能是设置样式的 DataTrigger
;
<TextBlock Text="{Binding Path=SomeProperty, Converter={StaticResource keyToNullValueConverter}">
<TextBlock.Triggers>
<DataTrigger Binding="{Binding Path=Text}" Value="No Data">
<Setter Property="FontStyle" Value="Italic"/>
</DataTrigger>
</TextBlock.Triggers>
</TextBlock>
按照这些思路可能会奏效。
关于c# - 如何使用 Binding 在 TextBlock 中实现 NullText?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5602254/