2011-02-28 72 views
5

我遇到了AutoCompleteBox篩選問題。SL4 AutoCompleteBox重複篩選結果問題

它似乎是rembering以前的過濾器。

例如我輸入「A」,它返回1個項目。我刪除'A'並輸入'Z',它應該返回1個項目。

問題是它返回'A'過濾器加上'Z'的結果,我刪除'Z'並輸入'S',它返回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

完美,謝謝。這是大都會主題爲我打破了 – 2012-07-09 12:53:29

1

我最終繼承了AutoCompleteBox來捕獲Populated事件並執行這個hack。

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

它解決了這個問題,我確信有一個更乾淨的方法來做到這一點,但我沒有時間來解決它。