2012-03-23 20 views
0

我有幾個控件,包括我想禁用的DataGrid,直到在演示文稿的第一個TextBox中有一個有效值。所以我添加了一個綁定到VM中的布爾屬性,並在xaml(下面)中綁定到它。數據綁定和焦點協調

該綁定工作,但具有「陷印」在TextBox(MoneyToAllocate)中的用戶的副作用。

大概這是因爲TB綁定是LostFocus,並且沒有地方讓焦點去實際觸發更新。什麼是解決這個問題的好方法?

乾杯,
Berryl

視圖模型

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}" ... 

編輯

我應該補充說,我試過的PropertyChanged的更新,但它變得有點亂自文本框的值需要由轉換器格式化。任何其他想法?

最後編輯

我結束了,讓以前不是一個製表位是製表另一個控制,所以在文本框中有一個地方去。儘管用戶可以輸入的值的範圍(.001到decimal.MaxValue)使得上下不切實際,但Phil最好地理解了問題並得到了答案。

回答

2

使用UpdateSourceTrigger=PropertyChanged

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

請參閱編輯。 – Berryl 2012-03-23 22:44:06

+0

如何使用DecimalUpDown控件,如來自擴展WPF工具箱的內容?強制在該控件中始終有一個有效的數字,並在其大於0時啓用其餘的用戶界面。 – Phil 2012-03-23 22:55:23

1

然後,你必須使用UpdateSourceTrigger =的PropertyChanged
- 如果您使用綁定您使用的是虛擬機的價值將不受影響,直至從文本框中
移動焦點 - 但如果將UpdateSourceTrigger = PropertyChanged添加到綁定中,VM屬性(MoneyToAllocate)將立即生效(當textBox.Text值更改時)

+0

請參閱編輯。 – Berryl 2012-03-23 22:44:19