2014-01-31 86 views
5

我想綁定一個Double?到一個文本框,我有一個問題,因爲當用戶清空文本框驗證發生。 我以爲我的應用程序在某些地方無法找到驗證,所以我創建了一個快速應用程序來測試。將TextBox綁定爲Nullable Double?

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = new ViewModel() {Value = 3, Value2 = null}; 
    } 
} 

public class ViewModel 
{ 
    public double Value { get; set; } 
    public double? Value2 { get; set; } 
} 

的XAML

<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="5" Height="20px"> 
     <TextBlock Margin="0,0,5,0">Double:</TextBlock> 
     <TextBox Width="50px" Text="{Binding Value}"></TextBox> 
    </StackPanel> 
    <StackPanel Grid.Row="1" Orientation="Horizontal" Margin="5" Height="20px"> 
     <TextBlock Margin="0,0,5,0">Double?:</TextBlock> 
     <TextBox Width="50px" Text="{Binding Value2}"></TextBox> 
    </StackPanel> 

當運行該應用程序綁定到值2文本框,是空的,但如果我鍵入一個值,然後刪除它,當文本框失去焦點它示出了一個錯誤。當我輸入一個值時,它只會消失。

我發現this post建議使用一個字符串,但他原本使用雙精度型而不是double?

我該如何做這項工作?是使用字符串的唯一方法嗎?

對我來說,綁定到雙重似乎很奇怪?不允許我設置空值。

+0

你確定你沒有鍵入無法被解析到一個'double',例如值。一個字?你提到的那個'錯誤'*可能只是告訴你,你不能將文本輸入到數字屬性中。 – Sheridan

+0

我剛剛將TextBox留空,Eugene的建議有意義並修復了問題。 – Dzyann

回答

8

首先。

不是這個:

<TextBox Width="50px" 

但這:

<TextBox Width="50" 

對於第二:

代替:

如果你做這樣的一招你的情況應該得到解決
<TextBox Width="50px" Text="{Binding Value2}"></TextBox> 

做到:

<TextBox Width="50" Text="{Binding Value2, TargetNullValue=''}"></TextBox> 

希望幫助

+1

請注意,其他輸入不會通過您的視圖模型 - 因此您的視圖模型仍然具有「正確的」舊雙值 – blindmeis

+0

合理的點。但它已經達到驗證技術:)所有用戶輸入都必須經過驗證。 –

+0

@blindmeis是的,現在我不得不添加一些特殊的驗證器。謝謝! – Dzyann

相關問題