2011-09-23 93 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; 
相关问题