如何隐藏属性在我的控件中的默认值?
我有这样一个属性(我不希望它可以为空如int?)如何隐藏属性在我的控件中的默认值?
public int id{get;set;}
我有一个绑定到id属性
<TextBox Text="{Binding id}"/>
当我的窗口加载一个TextBox我文本框有值0,我怎么能隐藏我的文本框
你可以使用一个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;
}
}
设置visibility属性崩溃ID默认值,或隐藏
或者如果你的意思是你只想隐藏它当ID = 0,那么你应该使用触发器
而不是使用整型,你可以在这里使用字符串作为你的ID并写你自己的验证。或者你可以使用int?而不是int。
public int? id{get;set;}
编辑 如果你不想id字段被更改为空的,不仅仅是绑定到一个字符串或使用一个转换器,但无论哪种方式,您将需要通过实施来实现自己的验证IDataErrorInfo。
我不想将id字段更改为可空 – 2012-07-16 11:27:03
您可以使用另外一个文本框与空字符串相同的网格内,并使其可见,当第一个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();
}
}
当用户在'textbox1'中输入'0'时会发生什么? – Bolu 2012-07-17 13:40:51
只要它将第二个文本框与空字符串放在txtbox1上。所以它会自动隐藏第一个.. – 2012-07-17 14:11:30
你是什么意思?隐藏文本框?或者当它是0时放置一个特殊的文本? – MBen 2012-07-16 11:04:54
只需将ID字段更改为空即可 – 2012-07-16 11:14:03
@KishoreKumar我不想将ID字段更改为可空 – 2012-07-16 11:27:50