2011-06-24 14 views
12

मैं Google के माध्यम से कोड ढूंढ रहा था जो पाठ बॉक्स से टेक्स्ट प्रॉपर्टी के आधार पर एक बटन को सक्षम और अक्षम करता है। यदि टेक्स्टबॉक्स में कुछ टेक्स्ट है तो बटन सक्षम होना चाहिए या अन्यथा बटन अक्षम होना चाहिए।WPF में टेक्स्टबॉक्स टेक्स्ट प्रॉपर्टी के आधार पर बटन सक्षम/अक्षम करें?

मुझे कुछ कोड मिला लेकिन xaml में कोड लेकिन कोई सी # नहीं मिला। मैं यह समझने में सक्षम नहीं हूं कि यह कैसे काम करता है।

कृपया मेरी मदद निम्नलिखित कोड के व्यवहार को समझने के लिए:

<TextBox Name="txtName" Width="100" Height="30"></TextBox> 

<Button Content="Add Name " Width="100" Height="30" 
    IsEnabled="{Binding ElementName=txtName, Path=Text.Length, Mode=OneWay}"/> 

IsEnabled बटन संपत्ति कैसे काम कर रहा है? IsEnabled संपत्ति के लिए सही और गलत सेट कैसे है? पथ क्या है? यह कैसे काम करता है?

उत्तर

6

यह article और article डब्ल्यूपीएफ डेटा बाइंडिंग और पथ कैसे काम करते हैं, समझाते हैं।

लेकिन उपरोक्त बाध्यकारी टेक्स्टबॉक्स पर टेक्स्ट प्रॉपर्टी को परिवर्तनों के लिए देखेगा। इसके बाद टेक्स्ट प्रॉपर्टी से लौटाए गए मूल्य पर लम्बाई संपत्ति दिखाई देगी, जो एक स्ट्रिंग है। लंबाई संपत्ति का मूल्य IsEnbled संपत्ति को पास किया जाता है।

मूल्य को भी परिवर्तित किया जाना चाहिए, क्योंकि आप एक बूलेन (IsEnabled संपत्ति) में Int32 (लंबाई संपत्ति) असाइन कर रहे हैं। यह आम तौर पर प्रकार कन्वर्टर्स के माध्यम से किया जाता है, यही कारण है कि उपर्युक्त काम (जो मुझे आश्चर्यचकित करता है)।

अद्यतन:

अब काम करता है ऊपर पहले लिंक, के रूप में MSDN पत्रिका लेख 2008 की तुलना में पुराने नहीं रह गया है ऑनलाइन उपलब्ध हैं। हालांकि वे सीएचएम फाइलों के रूप में उपलब्ध हैं। जुड़े लेख के लिए CHM लिंक, शीर्षक "डाटा अंक: डाटा WPF में बाइंडिंग" chm फ़ाइलों के रूप में ही उपलब्ध

2008 और पुराने मुद्दे हैं:, यह है:

http://download.microsoft.com/download/3/a/7/3a7fa450-1f33-41f7-9e6d-3aa95b5a6aea/MSDNMagazine2007_12en-us.chm

MSDN से । विंडोज़ के अधिकांश संस्करणों पर आपको पहले इन फ़ाइलों को अपनी स्थानीय मशीन पर सहेजना होगा, और फिर इसे पढ़ने के लिए फ़ाइल को अनवरोधित करना होगा। फ़ाइल को अनब्लॉक करने के लिए, उस पर राइट क्लिक करें, और गुणों का चयन करें, और फिर 'अनब्लॉक करें' बटन का चयन करें। सामग्री को पढ़ने के लिए उपलब्ध होगा।

+1

0 के साथ डब्ल्यूपीएफ में काफी अलग है 0 0 को गलत, सबकुछ> = 1 सच में बदल दिया गया है, काफी रोचक है। –

+0

@ एचबी। - हाँ, मैंने सोचा कि, बस सोच रहा है कि रूपांतरण क्या करता है :-) चूंकि 'bool b = 0;' मान्य नहीं है। शायद बाइंडिंग खुद? – CodeNaked

+0

@CodeNaked: बाध्यकारी प्रणाली द्वारा उपयोग किए जाने वाले वर्ग हैं, वे 'टाइपकॉन्टर' से प्राप्त होते हैं। –

1

अपने दृश्य मॉडल में एक संपत्ति जोड़ें जो IsEnabled के मान की गणना करता है और उस पर बाध्य करता है।

उस संपत्ति के लिए सेटटर में जिसे आपने टेक्स्टबॉक्स को बाध्य किया है। आपके लिए अतिरिक्त मूल्य भी IsEnabled प्रॉपर्टी के लिए परिवर्तित ईवेंट को ट्रिगर करता है।

1

आप MVVM/डेटा बाइंडिंग आप सका उपयोग करने के लिए नहीं करना चाहते हैं:

  1. तो टेक्स्ट बॉक्स और अक्षम की शैली के लिए एक DataTrigger जोड़ सकते हैं/बटन वहाँ सक्षम करें।

  2. या टेक्स्टबॉक्स की टेक्स्ट प्रॉपर्टी में बटन की IsEnabled संपत्ति को बांधें और एक स्ट्रिंग लम्बाई को बुलियन में बदलने के लिए एक मूल्य कनवर्टर का उपयोग करें।

2

कैसे एक ButtonTextBox सामग्री के आधार पर निष्क्रिय करने के लिए का एक उदाहरण के लिए this post देखें।

जब तक यह दृष्टिकोण काम करेगा, ICommand का उपयोग करना बेहतर अभ्यास है।

टिप्पणी

ElementName के जवाब में = XAML में नियंत्रण के नाम पर जो हम बाध्यकारी हैं करने के लिए। उदाहरण नीचे इसलिए {Binding ElementName=aName}

<TextBox x:Name="aName" /> 

Path = मूल्य है कि आप उस तत्व पर चाहते हैं की संपत्ति पथ होगा। उदाहरण के लिए, यदि आप टेक्स्ट प्रॉपर्टी का मूल्य प्राप्त करना चाहते हैं, तो आप {Binding Path=Text} का उपयोग करेंगे। यदि आप टेक्स्ट प्रॉपर्टी की लंबाई प्राप्त करना चाहते हैं, तो आप {Binding Path.Text.Length} और इसी तरह का उपयोग करें।

Mode=OneWay = जिस दिशा में बाध्यकारी मूल्यांकन किया जाता है। यह समझाया गया है here

+0

क्या आप यह बता सकते हैं कि बाध्यकारी कैसे काम करता है ... IsEnabled = "{बाइंडिंग एलिमेंटनाम = txtName, पथ = टेक्स्ट, मोड = वनवे। यह अनिवार्य है कि हमें हमेशा बाइंडिंग एलिमेंटनाम और पथ का उल्लेख करना होगा।मोड क्या है और यह कैसे काम करता है। plzz – Mou

1

यह WPF (xaml) में नया बाध्यकारी वाक्यविन्यास है।

  1. आप txtName पाठ बॉक्स नियंत्रण/तत्व
  2. आप तत्व यू करने के लिए बाध्य करने की कोशिश कर आर के क्या संपत्ति के लिए निर्दिष्ट करने के लिए Path का उपयोग करने के लिए बाध्य कर रहे हैं। इस मामले में आप टेक्स्टबॉक्स की टेक्स्ट प्रॉपर्टी और फिर टेक्स्ट की लम्बाई प्रॉपर्टी पर बाध्यकारी हैं।

तो, जब टेक्स्टबॉक्स खाली होता है। TextBox.Text.Length = 0 जिसका अर्थ है कि यह अक्षम हो जाएगा।

जैसे ही आप कोई मूल्य दर्ज करते हैं, यह becames> = 0 जो सत्य में अनुवादित हो जाता है।

मैं कोड की कोशिश करने से पहले WPF में बाइंडिंग के बारे में पढ़ने की पूरी कोशिश करता हूं। यह WinForm

+0

समझाएं कि आप यहां बता सकते हैं कि बाध्यकारी कैसे काम करता है ... IsEnabled = "{बाध्यकारी ElementName = txtName, पथ = टेक्स्ट, मोड = वनवे। यह अनिवार्य है कि हमें हमेशा बाइंडिंग एलिमेंटनाम और पथ का उल्लेख करना होगा। मोड और कैसे है यह काम करता है। plzz समझाओ। – Mou

संबंधित मुद्दे