2013-04-11 51 views
2

我想將項目寬度和高度綁定到模型。如何在綁定WPF中的高度和寬度時減少綁定異常的計數?

對於某些項目指定了寬度和高度,但大多數項目應設置爲「自動」模式。

所以我創建與屬性模型:

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

我怎麼能強迫我的控制設置高度爲「自動」,避免異常代?

+0

發現,我們可以直接拔下可空簽名並且默認設置爲NAN的兩倍。 Double.NaN;這將解決所有問題。 – Evgeny 2013-04-11 14:56:35

回答

1

我相信這是個什麼TargetNullValue屬性結合expersions內用於:

Height="{Binding Height, TargetNullValue=auto}" 

這應該對你所需要的工作。你也可以編輯你的get方法來處理空活動,但您可能需要更改數據類型反對能夠返回auto:「?」

public object Height 
{ 
    get 
    { 
     if (this.height == null) return "auto"; 
     return this.height; 
    } 
    set 
    { 
     this.height = value; 
     this.OnPropertyChanged("Height"); 
    } 
} 
+0

只需寫出Double.NaN是'auto':) – Evgeny 2013-04-11 14:57:08

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"} 

只是一些代碼從我的頭,所以不要介意任何語法問題,但多數民衆贊成基本上它

您可以使用它來修改和重寫一些超出的值。給人以很大的靈活性

相關問題