当我最初设置绑定<TextBlock Text="{Binding Position}"..>
时,UI给出0,因为int默认为0.首先,除非Position不是0
,否则如何停止显示结果?其次,如果Position = 5
,则UI会显示结果,如果再次转到0
,则停止再次显示结果
答案 0 :(得分:2)
在C#中,int是一个值类型,这意味着它永远不会是null
。您可以使用Nullable<int>
将其转换为Nullable,默认为null
。
快捷方式是问号。
如果您将排名定义为int? Position
,则应该获得您所追求的结果。
修改强>
在Position = 0
之后,没有看到有关该值的请求消失。
一个很好的选择是使用评论中提出的IValueConverter。
否则,您可以使用触发器,如下所示:
<Style TargetType="TextBlock"
Text="{Binding Position}">
<Style.Triggers>
<Trigger Property="Text" Value="0">
<Setter Property="Visibility" Value="Collapsed" />
</Trigger>
</Style.Triggers>
</Style>
答案 1 :(得分:1)
您可以在绑定中使用StringFormat
Text="{Binding Position, Mode=TwoWay, StringFormat='{}{0:#}'}"
答案 2 :(得分:1)
如果文本框是DataTemplate的一部分,请使用DataTrigger将TextBlock的文本设置为空字符串
<DataTrigger Binding="{Binding Position}"
Value="0">
<Setter TargetName="textPosition"
Property="Text"
Value="" />
</DataTrigger>
否则,您可以在绑定上使用转换器。
<TextBlock Text="{Binding Position, Converter={StaticResource MyConverter}}"..>
转换器:
public class ValConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if ((int)value == 0)
return string.Empty;
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return Binding.DoNothing;
}
}