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

を変更したときに、あなたのViewModelでそれをチェックアウトすることができ、検証のため

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

私はそれを試してみましたが、それでも例外はスローされます。 – DCB2524

+0

それは、それが来るときに '値'が 'ダブル'になることを期待しているので、まだ例外を投げているようです。 – DCB2524

+0

あなたのコードと例外メッセージの関連部分を投稿してください。 –

0

私はコメントを書くことができません:あなたのバインディングでバリューコンバータを使用するのはどうですか? TextBoxコントロールは文字列をその値として受け入れます。したがって、ViewModel/Code-Behindで2倍を使用する場合は、TextBoxの文字列値を2倍に解析する値コンバーターを使用する必要があります。

コンバータは、このようなものになることができます:あなたは、「有効な値」の範囲を定義し、プロパティが