2011-09-23 6 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; 
관련 문제