gpt4 book ai didi

c# - 如何使用 Binding 在 TextBlock 中实现 NullText?

转载 作者:太空狗 更新时间:2023-10-29 19:26:51 27 4
gpt4 key购买 nike

我想为绑定(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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com