我有一个这样的属性(我不希望它像 int 一样可以为空?)
public int id{get;set;}
我有一个绑定到 id 属性的 TextBox
<TextBox Text="{Binding id}"/>
当我的窗口加载我的 TextBox 的值为 0 时,我如何从我的 TextBox 隐藏 id 默认值
将可见性属性设置为折叠或隐藏
或者如果你的意思是你只想在 id = 0 时隐藏它,那么你应该使用触发器
您可以使用这样的绑定转换器:
[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;
}
}
您可以在此处使用字符串作为您的 ID 并编写您自己的验证,而不是使用 int。或者你可以使用int?而不是int。
public int? id{get;set;}
编辑 如果您不希望将 id 字段更改为可为空,而不仅仅是绑定到字符串或使用转换器,但无论哪种方式,您都需要通过实现IDataErrorInfo来实现自己的验证。
您可以在同一网格内使用另一个带有空字符串的 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();
}
}