除非值与0不同,如何设置默认的空绑定?

时间:2014-11-19 14:48:58

标签: wpf

当我最初设置绑定<TextBlock Text="{Binding Position}"..>时,UI给出0,因为int默认为0.首先,除非Position不是0,否则如何停止显示结果?其次,如果Position = 5,则UI会显示结果,如果再次转到0,则停止再次显示结果

3 个答案:

答案 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;
    }
}