2011-02-28 13 views
5

मुझे ऑटोकंपलेटबॉक्स फ़िल्टरिंग के साथ कोई समस्या है।SL4 AutoCompleteBox फ़िल्टर परिणाम जारी करने के मुद्दे

ऐसा लगता है कि पिछले फ़िल्टर को याद किया जा रहा है।

उदाहरण के लिए मैं 'ए' टाइप करता हूं और यह 1 आइटम देता है। मैं 'ए' को हटाता हूं और 'जेड' टाइप करता हूं जिसे 1 आइटम वापस करना चाहिए।

समस्या यह है कि यह 'ए' फ़िल्टर और 'जेड' से परिणाम देता है, मैं 'जेड' और 'एस' टाइप करता हूं जो 2 आइटम वापस लाता है और अब यह सभी 3 फ़िल्टरों से परिणाम प्रदर्शित करता है।

क्या मैं कुछ गलत कर रहा हूं?

stockTypes.Add(new StockTypeDTO() { Description = "Steel Coil", StockCode = "SC" }); 
stockTypes.Add(new StockTypeDTO() { Description = "Palletised Steel Coil", StockCode = "PS" }); 
stockTypes.Add(new StockTypeDTO() { Description = "ZZZZZ", StockCode = "ZZ" }); 


<input:AutoCompleteBox x:Name="testauto" FilterMode="Custom"> 
    <input:AutoCompleteBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <ContentPresenter Content="{Binding Description}" /> 
      </StackPanel> 
     </DataTemplate> 
    </input:AutoCompleteBox.ItemTemplate> 
</input:AutoCompleteBox> 

testauto.ItemsSource = this.StockTypes; 

testauto.ItemFilter = (search, item) => 
{ 
    StockTypeDTO stockType = item as StockTypeDTO; 

    if (stockType != null) 
    { 
     string filter = search.ToUpper(CultureInfo.InvariantCulture); 
     return (stockType.StockCode.ToUpper(CultureInfo.InvariantCulture).Contains(filter) 
     || stockType.Description.ToUpper(CultureInfo.InvariantCulture).Contains(filter)); 
    } 

    return false; 
}; 

उत्तर

2

इसके अलावा, पिछले परिणामों से पता चला है, लेकिन व्यवहार किया जैसे वे अस्तित्वहीन ठीक कह रहे हैं कर रहे हैं? मेरा मतलब है, उन्हें चुनना स्वत: पूर्ण बॉक्स के मूल्य को नहीं बदलता है? मुझे एक ही समस्या है, शैली बदलने के बाद इसे मिला। मेरी स्थिति में यह ListBox की शैली के कारण है। यदि आप सूची बॉक्स के लिए कस्टम शैली का उपयोग कर रहे हैं, तो इसे & डिफ़ॉल्ट शैली का उपयोग करने का प्रयास करें।

+0

बिल्कुल सही, धन्यवाद। यह महानगरीय विषय था जो इसे मेरे लिए तोड़ दिया –

1

मैं पॉप्युलेट किए गए ईवेंट को कैप्चर करने और इस हैक को निष्पादित करने वाले ऑटोकंपलेटबॉक्स को विरासत में मिला।

var listBox = this.GetTemplateChild("Selector") as ListBox; 
var items = listBox.ItemsSource; 
listBox.ItemsSource = null; 
listBox.ItemsSource = items; 

यह समस्या ठीक हो गई है, मैं वहाँ यह करने का एक क्लीनर तरीका है यकीन है, लेकिन मैं इसके साथ गड़बड़ चारों ओर करने के लिए समय नहीं था।

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