2016-07-08 119 views
0

我在Windows通用應用程序中使用x:BindINotifyPropertyChanged將類屬性綁定到嵌入在ListView控件中的TextBox。該類屬性的類型爲double,我想阻止用戶輸入string。我遇到的問題是,使用雙向數據綁定時,在用戶輸入無效輸入時,我可以處理它之前會拋出異常。x:綁定數據驗證

回答

0

嗨,你可以驗證它在你的雙向bindig屬性設置方法。這樣的事情:

private double number; 
public double Number 
{ 
    get 
    { 
     return number; 
    } 
    set 
    { 
     double tempNumber; 
     if (double.TryParse(value.ToString(), out tempNumber)) 
     { 
      number = value; 
     } 
     else 
     { 
      number = 0.0; 
     } 

     RaisePropertyChange(nameof(Number)); 
    } 
} 

希望這會有所幫助。

+0

我試過了,但它仍然會拋出異常。 – DCB2524

+0

它看起來仍然在拋出異常,因爲它預計'價值'是一個'雙',當它來。 – DCB2524

+0

請張貼您的代碼的相關部分和異常消息。 –

0

我不能寫評論,所以:在綁定中使用值轉換器怎麼樣? TextBox控件只接受字符串作爲它的值,所以如果你想在你的ViewModel/Code-Behind中使用雙精度值,你需要使用一個值轉換器來將TextBox的字符串值解析爲雙精度值,反之亦然。

轉換器可以是這樣的:

public class DoubleToStringConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     return value.ToString() 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     var parsed = false; 
     var parsedValue = 0.0; 
     if (double.TryParse(value.ToString(), out parsedValue) 
     { 
      return parsedValue; 
     } 
     else 
     { 
      return -1.0; 
     } 
    } 
} 

進行驗證,你可以定義一系列「有效價值」,並檢查了您的視圖模型時的性能變化