2011-09-23 10 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); 

ViewModel:

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 के लाभ स्थैतिक विधि यह है कि पहला पैरामीटर निर्भरता ऑब्जेक्ट के रूप में परिभाषित किया गया है, इसलिए यह उन ऑब्जेक्ट्स पर डेटा बाध्यकारी सक्षम करता है जो फ्रेमवर्क एलिमेंट या फ्रेमवर्ककंटेंट एलिमेंट (जैसे फ्रीजेबल्स) से प्राप्त नहीं होते हैं। – FreddyFlares

8

आप ViewModel करने के लिए वस्तु स्रोत को बदलने की जरूरत:

myBinding.Source = viewModelObject; 
संबंधित मुद्दे