如何在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')

我怎么能强迫我的控制设置高度为"自动",避免异常的产生?

如何在WPF中绑定高度和宽度时减少绑定异常计数

我相信这就是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"}

只是我脑子里的一些代码,所以不介意任何语法问题,但基本上是

你也可以用它来修改和覆盖一些多余的值。提供了很大的灵活性