私は、プレゼンテーションの最初のTextBoxに有効な値があるまで無効にしたいDataGridを含むいくつかのコントロールがあります。そこで、VMにバインドしてxaml(以下)にバインドするbooleanプロパティを追加しました。データバインディングとフォーカス調整
バインドは機能しますが、TextBox(MoneyToAllocate)でユーザーを「トラップ」するという副作用があります。
おそらくこれは、TBバインディングがLostFocusであり、フォーカスが移動して実際に更新をトリガーする場所がないためです。これを修正するにはどうすればよいでしょうか?
乾杯、
Berryl
のViewModel
public bool HasMoneyToAllocate { get { return MoneyToAllocate.Amount > 0; } }
public Money MoneyToAllocate {
get { return _moneyToAllocate; }
set {
if (value.Amount < 0) return;
_moneyToAllocate = new Money(value.Amount, SelectedCurrency);
NotifyPropertyChanged(() => HasMoneyToAllocate);
}
}
ビュー
<TextBox Text="{Binding MoneyToAllocate, Converter={StaticResource moneyConverter}}" />
<DataGrid IsEnabled="{Binding HasMoneyToAllocate}" ...
EDIT私は更新のためにPropertyChangedを試みたが、それは少し厄介取得することを追加している必要があります
テキストボックスの値コンバータによってフォーマットされる必要があります。他のアイデア?
FINAL EDIT
私は以前にタブがタブストップも停止しなかった別の制御をさせる巻き上げ、そのテキストボックスが行く場所を持っていました。ユーザーが入力できる値の範囲(.001からdecimal.MaxValue)がアップダウンを非実用的にしても、Philは問題を最もよく理解して答えを得ます。あなたはVMの値を使用している結合はてtextBox
からフォーカスが移動まで影響しないことを使用する場合 -
編集を参照してください。 – Berryl
拡張WPFツールキットなどからDecimalUpDownコントロールを使用するとどうなりますか?コントロールに有効な数値が常に存在するように強制し、それが0より大きい場合は残りのUIを有効にします。 – Phil