2012-07-16 96 views
0

我有这样一个属性(我不希望它可以为空如int?)如何隐藏属性在我的控件中的默认值?

public int id{get;set;} 

我有一个绑定到id属性

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

当我的窗口加载一个TextBox我文本框有值0,我怎么能隐藏我的文本框

+0

你是什么意思?隐藏文本框?或者当它是0时放置一个特殊的文本? – MBen 2012-07-16 11:04:54

+0

只需将ID字段更改为空即可 – 2012-07-16 11:14:03

+0

@KishoreKumar我不想将ID字段更改为可空 – 2012-07-16 11:27:50

回答

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; 
    } 
} 
1

设置visibility属性崩溃ID默认值,或隐藏

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

0

而不是使用整型,你可以在这里使用字符串作为你的ID并写你自己的验证。或者你可以使用int?而不是int。

public int? id{get;set;} 

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

+0

我不想将id字段更改为可空 – 2012-07-16 11:27:03

0

您可以使用另外一个文本框与空字符串相同的网格内,并使其可见,当第一个TextBox具有默认值为0。

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

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

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(); 
     } 
    } 
+0

当用户在'textbox1'中输入'0'时会发生什么? – Bolu 2012-07-17 13:40:51

+0

只要它将第二个文本框与空字符串放在txtbox1上。所以它会自动隐藏第一个.. – 2012-07-17 14:11:30