2011-09-23 35 views
60

Tôi có nhu cầu đặt ràng buộc trong mã.Làm cách nào để đặt ràng buộc trong Mã?

Tôi dường như không thể hiểu đúng.

Đây là những gì tôi đã cố gắng:

XAML:

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

Mã đằng sau:

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

ViewModel:

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

Khu nghỉ dưỡng được không cập nhật khi tôi đặt nó.

Tôi đang làm gì sai?

Trả lời

127

Hãy thử điều này:

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); 

Nếu bạn chỉ định path (như bạn làm trong constructor), nguồn của bạn nên chỉ ViewModel, phần .SomeString được đánh giá từ con đường.

+7

Bạn cũng có thể sử dụng txtText.SetBinding (TextBox.TextProperty, myBinding) ở vị trí của dòng cuối cùng chỉ để giảm gõ :) –

+1

@ManishDubey Lợi ích của việc phương thức tĩnh là tham số đầu tiên được định nghĩa là DependencyObject, vì vậy nó cho phép ràng buộc dữ liệu trên các đối tượng không lấy được từ FrameworkElement hoặc FrameworkContentElement (chẳng hạn như Freezables). – FreddyFlares

8

bạn cần thay đổi nguồn để ViewModel đối tượng:

myBinding.Source = viewModelObject; 
Các vấn đề liên quan