如何隐藏属性我的控件中的默认值?

时间:2012-07-16 11:02:34

标签: c# wpf

我有这样的属性(我不希望它像int一样可以为空?)

public int id{get;set;}

我有一个绑定到id属性的TextBox

<TextBox  Text="{Binding id}"/>

当我的Windows加载时,我的TextBox的值为0,如何隐藏我的TextBox中的id默认值

4 个答案:

答案 0 :(得分:1)

将visibility属性设置为折叠或隐藏

或者如果你的意思是你只想在id = 0时隐藏它,那么你应该使用触发器

答案 1 :(得分:1)

您可以像这样使用binding converter

[ValueConversion(typeof(int), typeof(string))]
public class IntegerConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        int intValue = (int)value;
        return intValue != 0 ? intValue.ToString() : string.Empty;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        int intValue = 0;
        int.TryParse((string)value, out intValue);
        return intValue;
    }
}

答案 2 :(得分:0)

您可以在此处使用字符串作为您的ID并编写自己的验证,而不是使用int。或者你可以使用int?而不是int。

public int? id{get;set;}

修改 如果您不希望将id字段更改为可为空,而不仅仅是绑定到字符串或使用转换器,但无论如何,您都需要通过实现IDataErrorInfo来实现自己的验证。

答案 3 :(得分:0)

您可以在同一网格中使用另一个带有空字符串的TextBox,并在第一个TextBox的默认值为0时使其可见。

<Grid>
    <TextBox  Text="{Binding id}" x:Name="txtbox1"/>
    <TextBox Text="" Visibility="{Binding Text,ElementName=txtbox1,Converter={StaticResource StringToVisibility}}"
</Grid>

在上面基于我们使用的Converter的代码中,它将在模板中工作。你必须在转换器中写入当文本带有“0”时,只需使第二个TextBox可见。

public class StringToVisibility : IValueConverter
    {
        public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            string str = value.ToString();
            if (str.Equals("0"))
            {
                return Visibility.Visible;
            }
            return Visibility.Collapsed;
        }

        public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new System.NotImplementedException();
        }
    }