2011-04-14 100 views
0

我試圖將文本框的內容綁定到我在控件內創建的屬性,但沒有成功。否則,我找到了一種方法,但它很複雜,我寧願更簡單。無論如何,這是最終代碼:綁定代碼頭痛的屬性

public partial class DateListEditor : UserControl, INotifyPropertyChanged { 
    private int _newMonth; 
    public int newMonth { 
     get { return _newMonth; } 
     set { 
     if(value < 1 || value > 12) 
      throw new Exception("Invalid month"); 
     _newMonth = value; 
     NotifyPropertyChanged("newMonth"); 
     } 
    } 

    public DateListEditor() { 
     InitializeComponent(); 
     DataContext = this; 
     newMonth = DateTime.Now.Month; 
    } 

    // ... 

然後在XAML:

<TextBox x:Name="uiMonth" Text="{Binding newMonth, Mode=TwoWay, ValidatesOnExceptions=True}"/> 

這個事情的作品。它會預先填充當前月份的文本框,並在焦點丟失時驗證它:很好。

但是我怎樣才能避免XAML線,並做一切代碼?我似乎無法解決這個問題。我試過這段代碼,但沒有任何反應:

InitializeComponent(); 
    Binding b = new Binding("Text") { 
    Source = newMonth, 
    ValidatesOnExceptions = true, 
    Mode = BindingMode.TwoWay, 
    }; 
    uiMonth.SetBinding(TextBox.TextProperty, b); 

    DataContext = this; 

我該如何做到這一點,而無需在XAML中設置綁定?

回答

2

嘗試改變這一行,看看它是否有助於

//oldway  
Binding b = new Binding("Text") 

//newway 
Binding b = new Binding("newMonth") 

你給的結合應該是路徑到你想要的屬性的路徑。你在哪裏設置源,你甚至可以離開這個空白

+0

十分感謝!我從來沒有能夠明白項目去哪裏:) – Palantir 2011-04-15 09:26:54

2

+1潭,不要忘記來源:

Binding b = new Binding("newMonth"){ 
    Source = this, // the class instance that owns the property 'newMonth' 
    ValidatesOnExceptions = true, 
    Mode = BindingMode.TwoWay, 
}; 
+0

非常有幫助,謝謝! – Palantir 2011-04-15 09:27:40