2012-03-23 9 views
0

私は、プレゼンテーションの最初の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
からフォーカスが移動まで影響しないことを使用する場合 -

答えて

2

使用UpdateSourceTrigger=PropertyChanged

<TextBox 
    Text="{Binding MoneyToAllocate, UpdateSourceTrigger=PropertyChanged, 
      Converter={StaticResource moneyConverter}}" /> 
+0

編集を参照してください。 – Berryl

+0

拡張WPFツールキットなどからDecimalUpDownコントロールを使用するとどうなりますか?コントロールに有効な数値が常に存在するように強制し、それが0より大きい場合は残りのUIを有効にします。 – Phil

1

その後、あなたはUpdateSourceTrigger =を使用する必要がありますが
のにPropertyChanged - UpdateSourceTrigger = PropertyChangedをバインドに追加すると、VMプロパティ(MoneyToAllocate)が即座に有効になります(textBox.Text値が変更されたとき)

+0

編集を参照してください。 – Berryl