2011-02-02 14 views
5

यह कोई प्रश्न नहीं है लेकिन समस्या का मेरा जवाब मुझे इंटरनेट पर समाधान नहीं मिला।ऑटोकंपलेटबॉक्स और सर्चटेक्स्ट साफ़

मुझे एक एमवीवीएम सिल्वरलाइट एप्लिकेशन में सर्चटेक्स्ट को साफ़ करने में कोई समस्या थी। मैं चयनित इटिम और टेक्स्ट को साफ़ कर सकता था लेकिन सर्चटेक्स्ट पीछे छोड़ दिया गया था। यह केवल पढ़ा जाता है और बाध्यकारी द्वारा बदला नहीं जा सकता है।

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

भले ही आपके पास चयनित इटैम और टेक्स्ट गुणों के लिए बाध्यकारी हों और आप उन्हें 'शून्य' और स्ट्रिंग पर सेट करें। क्रमशः खोज सर्चटेक्स्ट संपत्ति बनी हुई है और ऑटोकंपलेटबॉक्स स्पष्ट नहीं होगा लेकिन इसमें 'au' होगा।

उत्तर

2

मैंने इस इंटरनेट पर इस बारे में पोस्ट किया लेकिन नियंत्रण पर कोई जवाब नहीं मिला और इसलिए मैं इसे एक अलग कोण से आया जो कि मेरे जैसे निराश होने में मदद कर सकता है।

मैं सिल्वरलाइट नेविगेशन टेम्पलेट एप्लिकेशन का उपयोग कर रहा हूं जो सिल्वरलाइट पृष्ठों को लोड करने के लिए नेविगेशन फ्रेम का उपयोग करता है। मैंने देखा कि अगर मैं किसी अन्य पृष्ठ पर नेविगेट किया और मेरे डेटा फॉर्म में लौटा तो सर्चटेक्स्ट को मंजूरी दे दी गई। गुणों के लिए बाध्य किए गए किसी भी मूल्य वैध बने रहे, केवल SearchText ने सभी AutoCompleteBoxes पर साफ़ कर दिया था। इसलिए मैंने नेविगेशन फ्रेम को व्यूमोडेल में इंजेक्शन देने के पेजकंडक्टर विधि का उपयोग किया जहां मैं रीफ्रेश विधि को कॉल कर सकता था। मुझे सिल्वरलाइट फायरस्टार्टर इवेंट से जॉन पापा के example से यह विधि मिली, मैंने बस आईपेज कंडक्टर इंटरफ़ेस में एक ताज़ा विधि जोड़ा, इसलिए अब मैं 'पेजकंडक्टर। रीफ्रेश()' को कॉल करने में सक्षम हूं जो पृष्ठ को पुनः लोड करने जैसा है। मुझे आशा है कि इससे किसी को वहां मदद मिलेगी।

1
var t = ProductCombo.ItemsSource; 
ProductCombo.ItemsSource = null; 
ProductCombo.Text = string.Empty; 
ProductCombo.SelectedValue = null; 
//ProductCombo.Text = string.Empty; 
ProductCombo.ItemsSource = t; 

इस please.it प्रयास करें मुझे

0

वर टी = ProductCombo.ItemsSource के लिए काम किया, ProductCombo.ItemsSource = शून्य; ProductCombo.Text = string.Empty; ProductCombo.SelectedValue = null; //ProductCombo.Text = string.Empty; ProductCombo.ItemsSource = t;

अनजाने में यह कोड-पीछे है और मुझे एक एमवीवीएम समाधान की आवश्यकता है।

public string AnalisisText 
    { 
     get { return _analisisText; } 

     set 
     { 
      if (_analisisText == value) 
      { 
       return; 
      } 

      _analisisText = value; 

      RaisePropertyChanged(AnalisisTextPropertyName); 
     } 
    } 

    public DatosAutoCompletaPedidosDetalleViewDTO AnalisisSelect 
    { 
     get { return _analisisSelect; } 

     set 
     { 
      if (_analisisSelect == value) 
      { 
       return; 
      } 


      _analisisSelect = value; 

      if (_analisisSelect == null) AnalisisText = ""; 

      RaisePropertyChanged(AnalisisSelectPropertyName); 
     } 
    } 

इसलिए, जब आप संपत्ति SelectedItem को अशक्त निर्धारित करते हैं, अन्य संपत्ति "करने के लिए सेट हो जाएगा":

1

आप संपत्ति SelectedItem आबद्ध संपत्ति के हिस्से के अंदर सेट पाठ, इस तरह bindeaded स्पष्ट करना चाहिए।

0

मुझे हाल ही में मेरे डब्ल्यूपीएफ ऐप के साथ एक ही समस्या थी। मुझे पता चला कि समाधान ऑब्जेक्ट को चयनित इटैम को शून्य पर सेट नहीं करना है, बल्कि इसके डिफ़ॉल्ट मान पर सेट करना है। इसे समझने के लिए मुझे थोड़ी देर लग गई। तो आपके उदाहरण में, यह SelectedCountry = null नहीं होगा, लेकिन SelectedCountry = new SelectedCountry() होगा। इस मामले में SearchText भी साफ़ किया गया है। इस मामले के बारे में मेरी एसओ पोस्ट देखें: Autocompletebox doesn't clear keyboard strokes

-1

ज़रूर SearchText संपत्ति केवल पढ़ने के लिए है, लेकिन हम AutoCompleteBox के बच्चे घटक प्राप्त कर सकते हैं:

var searchText = autoCompBox.GetChildByType<TextBox>(item => item.Name == "Text"); 

और अब हम पाठ बॉक्स घटक का पाठ संपत्ति के माध्यम से SearchText रीसेट कर सकते हैं:

if (searchText != null) searchText.Text = string.Empty; 

सी # 6.0 में यह अधिक लापरवाही से है:

autoCompBox.GetChildByType<TextBox>(item => item.Name == "Text")?.Text = string.Empty; 
+0

एक छोटी सी स्पष्टीकरण के लिए कोड स्निपेट आमतौर पर मदद करता साथ जाने के लिए। – hardillb

1

मुझे प्राप्त करने का सबसे आसान तरीका है AutoCompleteBox:

public class AutoCompleteBoxClear : AutoCompleteBox 
{ 
    public AutoCompleteBoxClear() 
    { 
     DataContextChanged += (o, e) => 
     {     
      if (SelectedItem == null) 
       Text = string.Empty; 
     }; 
    } 
} 

अब आप अपने XAML में अपने नए AutoCompleteBoxClear नियंत्रण का उपयोग करें। (। यानी उपयोगकर्ता क्लिक dataform में जोड़ें)

यह पाठ केवल जब अशक्त करने के लिए autocompletebox DataContext परिवर्तन को साफ करता है

नोट: मुझे लगता है कि DataContextChanged केवल सिल्वरलाइट 5 में उपलब्ध है, लेकिन मुझे लगता है कि चाहते हैं कि किसी को अब भी Silverlight का उपयोग इन दिनों संभावना अब तक उन्नत किया है | ...

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