我想为绑定到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)
我建议实施一个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)
这些方面的东西可能有效.