0

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

public int id{get;set;}

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

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

当我的窗口加载我的 TextBox 的值为 0 时,我如何从我的 TextBox 隐藏 id 默认值

4

4 回答 4

1

将可见性属性设置为折叠或隐藏

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

于 2012-07-16T11:03:59.250 回答
1

您可以使用这样的绑定转换器

[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;
    }
}
于 2012-07-16T11:12:43.523 回答
0

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

public int? id{get;set;}

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

于 2012-07-16T11:16:46.000 回答
0

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

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

在上面基于我们使用的转换器的代码中,它将在模板中工作。您必须在转换器中写入,当文本带有“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();
        }
    }
于 2012-07-16T13:56:49.667 回答