如何在WPF中绑定高度和宽度时减少绑定异常计数
本文关键字:绑定 异常 WPF 高度 | 更新日期: 2023-09-27 18:08:34
我想将项目的宽度和高度绑定到模型。
对于一些项目的宽度和高度是指定的,但大多数应该设置为"自动"模式。
所以我创建的模型属性:
public double? Height
{
get
{
return this.height;
}
set
{
this.height = value;
this.OnPropertyChanged("Height");
}
}
我将它绑定到我的视图。
如果height == null我的控件大小设置为auto,这是OK的。但也有例外:
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')
我怎么能强迫我的控制设置高度为"自动",避免异常的产生?
我相信这就是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");
}
}
你可以绑定你的Height属性并使用ValueConverter。实现接口IValueConverter并将其添加到绑定中。这样,当存在无效值时,您可以返回'auto'。
这个应该在你的xaml
里<res:HeightConverter x:key=HeightConverter/>
<label height="{Binding MyHeight, ValueConverter={StaticResource HeightConverter}"/>
在你的转换器中
Public Class HeightConverter : IValueConverter ......
if(value = Nothing){Return "auto"}
只是我脑子里的一些代码,所以不介意任何语法问题,但基本上是
你也可以用它来修改和覆盖一些多余的值。提供了很大的灵活性