如何在带有绑定的TextBlock中实现NullText?

Jim*_*Jim 8 c# wpf

我想为绑定到ViewModel中的属性的TextBlock实现"NullText"行为.当ViewModel中的该属性为null或为空时,我想显示类似" 无数据 "的灰色斜体文本.我希望这遵循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>
Run Code Online (Sandbox Code Playgroud)

Jam*_*ter 5

我建议实施一个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...
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我刚刚意识到你想要设置样式...嗯,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>
Run Code Online (Sandbox Code Playgroud)

这些方面的东西可能有效.