2

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

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

所以我创建了具有属性的模型:

    public double? Height
    {
        get
        {
            return this.height;
        }

        set
        {
            this.height = value;
            this.OnPropertyChanged("Height");
        }
    }

我将它绑定到我的视图。

如果height == null我的控件大小设置为自动,这没关系。但我有例外:

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

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

4

2 回答 2

1

我相信这是该TargetNullValue属性在绑定 expersions 中的用途:

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");
    }
}
于 2013-04-11T14:44:23.713 回答
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"}

只是我脑海中的一些代码,所以不要介意任何语法问题,但基本上就是这样

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

于 2013-04-11T14:41:19.350 回答