我想将项目宽度和高度绑定到模型。
对于某些项目,指定了宽度和高度,但大多数都应设置为“自动”模式。
所以我用属性创建了模型:
public double? Height
{
get
{
return this.height;
}
set
{
this.height = value;
this.OnPropertyChanged("Height");
}
}
我将它绑定到我的观点。
如果 height == null ,我的控件大小设置为auto,这是正常的。 但我有例外:
System.Windows.Data Error: 5 : Value produced by BindingExpression is not valid for target property.; Value='<null>' BindingExpression:Path=Height;
target property is 'Height' (type 'Double')
如何强制我的控件将高度设置为“自动”并避免异常生成?
答案 0 :(得分:1)
您可以绑定到Height属性并使用ValueConverter。 实现接口IValueConverter并将其添加到绑定中。这样,当值无效时,您可以返回“自动”。
这应该在你的xaml
中<res:HeightConverter x:key=HeightConverter/>
<label height="{Binding MyHeight, ValueConverter={StaticResource HeightConverter}"/>
这是你的转换器
Public Class HeightConverter : IValueConverter ......
if(value = Nothing){Return "auto"}
只是我脑子里的一些代码,所以不介意任何语法问题,但基本上就是
您也可以使用它来修改和覆盖一些多余的值。提供了很大的灵活性
答案 1 :(得分:1)
我相信这就是TargetNullValue
属性在绑定扩展中的用法:
Height="{Binding Height, TargetNullValue=auto}"
这应该适合您的需要。您还可以编辑get方法来处理null事件,但您可能必须将数据类型更改为object才能返回auto
:
public object Height
{
get
{
if (this.height == null) return "auto";
return this.height;
}
set
{
this.height = value;
this.OnPropertyChanged("Height");
}
}