我有这样的属性(我不希望它像int一样可以为空?)
public int id{get;set;}
我有一个绑定到id属性的TextBox
<TextBox Text="{Binding id}"/>
当我的Windows加载时,我的TextBox的值为0,如何隐藏我的TextBox中的id默认值
答案 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();
}
}