2011-09-23 131 views
60

我有需要在代碼中設置綁定。如何在代碼中設置綁定?

我似乎無法得到正確的壽。

這是我曾嘗試:

XAML:

<TextBox Name="txtText"></TextBox> 

後面的代碼:

Binding myBinding = new Binding("SomeString"); 
myBinding.Source = ViewModel.SomeString; 
myBinding.Mode = BindingMode.TwoWay; 
myBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 
BindingOperations.SetBinding(txtText, TextBox.TextProperty, myBinding); 

視圖模型:

public string SomeString 
    { 
     get 
     { 
      return someString; 
     } 
     set 
     { 
      someString= value; 
      OnPropertyChanged("SomeString"); 
     } 
    } 

屬性沒有更新時,我設置它。

我在做什麼錯了?

回答

127

試試這個:

Binding myBinding = new Binding(); 
myBinding.Source = ViewModel; 
myBinding.Path = new PropertyPath("SomeString"); 
myBinding.Mode = BindingMode.TwoWay; 
myBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 
BindingOperations.SetBinding(txtText, TextBox.TextProperty, myBinding); 

如果指定path(就像你在構造函數來完成),將信號源應該只是ViewModel,該.SomeString部分是從路徑進行評估。

+7

你也可以代替最後一行的使用txtText.SetBinding(TextBox.TextProperty,myBinding)只是爲了降低打字:) –

+1

@ManishDubey的好處靜態方法是將第一個參數定義爲DependencyObject,因此它可以對不從FrameworkElement或FrameworkContentElement派生的對象(如Freezables)啓用數據綁定。 – FreddyFlares

8

您需要更改源視圖模型對象:

myBinding.Source = viewModelObject; 
相關問題