2010-03-30 8 views
7

मैं WPF में एक संख्यात्मक टेक्स्टबॉक्स बना रहा हूं, जिसमें मूल्य बढ़ाने और घटाने के लिए दो बटन हैं।एक WPCh टेक्स्टबॉक्स पर टेक्स्ट चेंज किए गए ईवेंट को कैसे बल दें और फोकस करें?

मैंने व्यवहार को प्रबंधित करने के लिए दो रूटेड कॉमांड बनाया है और वे अच्छी तरह से काम कर रहे हैं। केवल एक समस्या है जिसे मैं हल करना चाहता हूं। मैं चाहता हूं कि नियंत्रण टेक्स्टप्रॉपर्टी पर बाध्य होने वाली सभी ऑब्जेक्ट को सूचित करता है जब कोई वृद्धि या कमी आदेश निष्पादित होता है।

पल यह अधिसूचना भेजता है पर केवल जब मैं एक और नियंत्रण

किसी भी मदद वास्तव में सराहना की है करने के लिए ध्यान देने के बदलने के लिए, आप बाध्यकारी में धन्यवाद

उत्तर

11

उपयोग UpdateSourceTrigger="Explicit" और TextChanged स्थिति में अद्यतन BindingSource। कुछ इस तरह तो आप लिख रहे हैं:

<NumericTextBox x:Name="control" Text={Binding Path=MyProperty}/> 

बजाय इस

<NumericTextBox x:Name="control" Text={Binding Path=MyProperty, UpdateSourceTrigger=Explicit}/> 

की तरह करते हैं और TextChanged ईवेंट हैंडलर में बाध्यकारी अद्यतन करें।

control.GetBindingExpression(NumericTextBox.TextProperty).UpdateSource(); 

और ऐसा किया गया। उम्मीद है कि यह मदद करता है !!

+0

@viky बहुत बहुत धन्यवाद! मैं भूल गया था कि अभिव्यक्ति का उपयोग संभव था "control.GetBindingExpression (NumericTextBox.TextProperty) .UpdateSource();" यह उत्तम है। मैं इसे केवल तभी कॉल कर रहा हूं जब उपयोगकर्ता बटन को बढ़ाकर घटाएं और पाठ को मैन्युअल रूप से बदलते समय सामान्य व्यवहार का उपयोग करें। – Drake

+7

क्यों न केवल 'टेक्स्ट = "{बाइंडिंग YourBindableProperty, UpdateSourceTrigger = PropertyChanged}" का उपयोग क्यों करें? –

2

TextBox पर टेक्स्ट प्रॉपर्टी के बाध्यकारी के लिए डिफ़ॉल्ट व्यवहार LostFocus पर अपडेट करना है। आप अपने स्थिर ctor में TextProperty पर मेटाडाटा अधिभावी करके अपने कस्टम नियंत्रण में बदल सकते हैं:

Text="{Binding Path=MyProperty, UpdateSourceTrigger=PropertyChanged}" 

(मैं यह पाठ बॉक्स पर परीक्षण):

static NumericTextBox() 
{ 
    TextProperty.OverrideMetadata(
     typeof(NumericTextBox), 
     new FrameworkPropertyMetadata("", // default value 
      FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, 
      null, // property change callback 
      null, // coercion callback 
      true, // prohibits animation 
      UpdateSourceTrigger.PropertyChanged)); 
} 
+0

@abe धन्यवाद एबे, बहुत उपयोगी लेकिन विकी उत्तर मेरे मामले – Drake

25

एक सरल तरीका है। गुड लक

+1

+1 के लिए अधिक लचीला है। 'टेक्स्ट =" {बाइंडिंग MyTextProperty, UpdateSourceTrigger = PropertyChanged} "' जाने का सबसे अच्छा तरीका प्रतीत होता है। –