最近MVVMで遊んでいましたが、私が遭遇する前に多くの問題を遭遇しました。WPFで浮動小数点入力フィールドをバインドする際の問題
は基本的に私はUpdateSourceTriggerがにPropertyChangedに設定されるテキストボックスのTextプロパティにバインドされたINotifyPropertyChangedインターフェイスを実装、私のViewModelに文字列プロパティにリンクされていた私のモデル、でdouble型のプロパティを持っていましたただし、テキストボックスでは小数点以下の桁やマイナス記号を入力できません。また、アプリケーションがクラッシュすることなくテキストボックスを空白に設定することもできます。
私はこれを解決するために徹底的に検索し、いくつかの面で機能する可能性のある解決策をたくさん見つけましたが、他の問題を残しました。最後に、私はこの問題を回避するためのものの組み合わせを使用しました:
私は有用であることがthisを発見し、そして配置することで:
public App()
{
System.Windows.FrameworkCompatibilityPreferences.KeepTextBoxDisplaySynchronizedWithTextProperty = false;
}
をApp.xaml.csで、私は今、小数点を挿入することができ私のテキストボックスの場所。私はまだ ' - 'を使用することも、テキストボックスを空白にすることもできませんでした。
これを回避するには2つのことを行いました。私のXAMLでは、データバインディングに次のStringFormatを追加しました。
<TextBox Text="{Binding StringLinkedToDouble, UpdateSourceTrigger=PropertyChanged, StringFormat=-N2}"/>
「 - 」「N2」の前には、入力にマイナス記号を私を許可されますが、私は最初の数値を入力して、入力された場合を除き - コードがエラーを投げた番号の先頭に「」を。この問題を回避する、と私はエラーに実行せずに、空白のテキストボックスを設定することができなかったという事実は、私は私のViewModelにこれをしなかったために:これが働くかもしれないが
public StringLinkedToDouble
{
get { return _model.DoubleToBeLinked.ToString(); }
set
{
if ((value != "") && (value != "-"))
_model.DoubleToBeLinked = Convert.ToDouble(value);
RaisePropertyChanged("StringLinkedToDouble");
}
}
、私はMVVMに新しいですし、私がこれを投稿しているのは、このソリューションが非常にシンプルでシンプルすぎるように思えたからです.MVVMが行く限り、これは「良い」ものではないかもしれないと心配しています。私は公平ではないと言われることを期待している半分です。それが事実なら、誰かがより良い選択肢を提案することができますか?前もって感謝します! また、私が行ったことが、適切なMVVMでない場合は、私に教えてください:)
あなたのビューモデルの文字列にテキストボックスをバインドするのは簡単です。私はあなたが何か間違っていると思う "..文字列のプロパティにリンクされていた私のモデルでダブル。" – Crowcoder