2016-05-30 48 views
0

我在我的視圖模型decimal?上有一個屬性。 NULL應該是該屬性的有效值,但是當我從DecimalUpDown控件中擦除文本時,會發生驗證錯誤,並且該屬性不會被賦予值NULL(無論以前是否保留)。在WPF擴展工具包DecimalUpDown控件中允許爲NULL

<xctk:DecimalUpDown ValueChanged="UpDownBase_OnValueChanged" Text="{Binding ServiceSize}" Minimum="0" Grid.Column="4" Grid.Row="2" Margin="5" IsEnabled="{Binding IsEditable}"/> 

如果我輸入一個數字 enter image description here

但只要數量被擦除發生校驗錯誤,它將正確綁定,值:

控制在像XAML聲明不能被設置回NULL(在這種情況下,該模型仍然具有「5」作爲「ServiceSize」的值)。 enter image description here

Validation.GetHasError()對此控件返回true。我可以完全以某種方式刪除驗證規則嗎?

+0

您可以嘗試使用的IValueConverter處理空輸入 - 如果你正在使用數據綁定。 –

+0

@Ephraim我曾嘗試過,但我想我沒有正確地做,因爲我從頭開始重寫轉換器後正常工作。如果你添加一個答案一些示例代碼,我可以接受它 – ryan

回答

0

您可以實現一個IValueConverter來處理空輸入。

public class DecimalUpDownValueConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, 
     object parameter, CultureInfo culture) 
    { 
     // handle input on a case-to-case basis 
     if(value == null) 
     { 
      // Do something 
      return 0; 
     } 
     else 
     { 
      return value; 
     } 
    } 

    public object ConvertBack(object value, Type targetType, 
     object parameter, CultureInfo culture) 
    { 
     // Do the conversion from model property to DecimalUpDownValue 
     return value; 
    } 
} 

在您的觀點:(假設你添加的DecimalUpDownValueConverter爲靜態資源)

<xctk:DecimalUpDown ValueChanged="UpDownBase_OnValueChanged" Text="{Binding ServiceSize, Converter = { StaticResource DecimalUpDownValueConverter }}" Minimum="0" Grid.Column="4" Grid.Row="2" Margin="5" IsEnabled="{Binding IsEditable}"/> 
相關問題