2011-09-27 16 views

答えて

4

正直なところ、MVVMと数値のテキストボックスには何がありますか?

新しいTextBoxまたはAttachedPropertyまたはビヘイビアを作成する数値テキストボックスが必要な場合。 Hereは、MaskedTextboxビヘイビアが意味することを確認するための例です。

あなたのMVVMパートへ私はあなたの入力が数字だけであることを検証したいと仮定します。 viewmodelにint型のプロパティがある場合、ビューにint型に変換可能な入力がある場合はバインディングが機能します。そうしないと、あなたのビューモデルに通知されません。

最初に、あなたのビューは数値入力(数値のテキストボックス)を受け取り、viewmodelプロパティはintであることができることを確認してください。

または2番目:viewmodelプロパティの型がtypeof stringで、IDataErrorInfoを使用して、入力が数値でないときにビューに通知させます。

+5

MVVMが含まれている理由は、プレビューキーイベントがコードの背後で使用されている実装がわかりました。私はちょうどそれらの答えを排除したい – katie77

+0

@Blindmeis、私はその笑に翻訳を持つことができます –

0

まあ...数字のテキストボックスのテキストプロパティが変更されただけで、あなたのビューモデルに通知されたい場合。数値テキストボックスの.Textプロパティが依存関係プロパティでない場合、コーダをスラップします。

この1:http://wpftoolkit.codeplex.com/wikipage?title=DecimalUpDown&referringTitle=Home

私がお勧めすることができますし、経由でのviewmodelからそれにバインドすることができます:あなたは後ろのViewModelを望んでいないだろうMVVMの標準的な定義では

<!-- View: --> 
<NumericTextBox Text="{Binding MyViewModelTextStringProperty}" /> 
//ViewModel: 
public string MyViewModelTextStringProperty 
{ 
    get/set with NotifyPropertyChanged.... 
} 
1

カスタムコントロール。 TextBoxコントロールを拡張し、数値入力のみが入力されていることを確認してください。数値入力を返すDependencyPropertyも追加する必要があります。

ViewModelは、そのコントロールがウィンドウまたはコンポジットコントロールで使用されるときに表示されます。 TextまたはNumeric DependencyPropertyをViewModelのパブリックプロパティにバインドします。

0

これをViewModelで実際にやりたければ、バインドされたプロパティを文字列にする必要があります。各キーストロークでバインディングが更新されるようにしてください(UpdateSourceTriggerを使用)。

セッターでは、例外を発生させるか、数値以外の文字を切り捨てることで、数値以外の値を拒否します。後者のアプローチは、貼り付けられたテキストに数字と文字が混在していても数字だけを保持する必要があるコピー/貼り付け操作のために働く利点があります。

私は、数値プロパティを公開するだけの特殊なコントロールを使用する方がクリーンなアプローチであるという他の提案にも同意します。

ありがとう、

Eric。

4

WPFでは、TextBoxをDecimalプロパティまたはIntプロパティにバインドすると、そのintまたはdecimalのみが受け入れられます。そうでない場合、バインディングに適切な値を持たない赤い境界線が表示されます。数字の上向きテキストボックスについては、WPFツールキットですぐに利用できます。here

関連する問題