2013-06-05 49 views
4

我有一個文本框,這取決於我需要啓用/禁用其他文本Boxes.I使用MVVM模式的文本框值。無法禁用WPF中使用MVVM的控件(TextBoxes)?

因此,這裏是我的問題,每當我在TextBox1中輸入一些文本時,TextBox1的Setter被觸發,並且我能夠檢查循環,valus是否存在,並且我正在禁用其他文本框。現在,當文本框中有單個值時,如「9」,並且我正在刪除/退格,Set事件不會被觸發以啓用其他文本框。

查看:

<TextBox Text = {Binding TextBox1 , UpdateSourceTrigger = PropertyChanged,Mode= TwoWay}/> 
<TextBox Text = {Binding TextBox2 , UpdateSourceTrigger = PropertyChanged,Mode= TwoWay}/> 
<TextBox Text = {Binding TextBox3 , UpdateSourceTrigger = PropertyChanged,Mode= TwoWay}/> 

視圖模型:

private int_textBox1; 
public int TextBox1 
{ 
get {return _textBox1;} 
set 
    { 
    _textBox1= value; 
    if(value > 0) 
     { 
      //Code for Disabling Other Text Boxes (TextBox2 and TextBox3) 
     } 
     else 
     { 
      // Code for Enabling Other Text Boxes (TextBox2 and TextBox3) 
     } 
    NotifyPropertyChanged("TextBox1"); 
    } 
} 
+1

說實話它必須給編譯器錯誤,因爲值是字符串,並且您將它與Int值比較爲0.在我看來,您必須寫入值。長而不是價值。 –

回答

7

如果使用MVVM模式,你應該創建布爾特性,並結合TextBox.IsEnabled財產吧。你的布爾屬性應提高PropertyChanged事件,爲了讓view(文本框你的情況),你的財產是真的變了:

public bool IsEnabled1 
{ 
    get { return _isEnabled1; } 

    set 
    { 
     if (_isEnabled1 == value) 
     { 
      return; 
     } 

     _isEnabled1 = value; 
     RaisePropertyChanged("IsEnabled1"); 
    } 
} 

,然後在XAML:

<TextBox Text="{Binding TextBox1, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
     IsEnabled="{Binding IsEnabled1}" /> 

等與其他文本框

1

首先,如果你updatesourcetrigger設置的PropertyChanged - 當您在文本框做任何事情你的setter被稱爲。我在一個簡單的測試項目中檢查這個。 btw你在調用者中調用OnPropertyChanged,因爲它不在你的示例代碼中?

如果不是你的綁定似乎被打破。所以請檢查您的綁定或張貼更多相關的代碼。

編輯:

如果你改變你的類型爲int?你可以做下面的XAML

<TextBox Text="{Binding MyNullableInt, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, TargetNullValue=''}"/> 
+0

但是當我刪除文本框中的單個值時,我的二傳手沒有觸發?所以,即使他們刪除單個值,爲了禁用其他文本框,我如何才能實現這種觸發? – Ujjwal27

+0

我不明白爲什麼在你的項目中發生這種情況。我的測試應用程序設置器被稱爲無論我使用DEL或退格或什麼。你能在運行時用Snoop檢查你的綁定嗎? – blindmeis

+0

您可以請嘗試更改爲TextBox1的字符串爲Int Pls – Ujjwal27