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

时间:2013-04-11 14:36:20

标签: c# wpf mvvm binding double

我想将项目宽度和高度绑定到模型。

对于某些项目,指定了宽度和高度,但大多数都应设置为“自动”模式。

所以我用属性创建了模型:

    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')

如何强制我的控件将高度设置为“自动”并避免异常生成?

2 个答案:

答案 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");
    }
}