2011-02-28 4 views
5

AutoCompleteBox 필터링에 문제가 있습니다.SL4 AutoCompleteBox 반복 필터 결과 문제

이전 필터를 수정 한 것 같습니다.

예를 들어 '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

감사합니다. 저를 위해 깨뜨린 것은 전세계적인 주제였습니다. –

1

채워진 이벤트를 캡처하고이 해킹을 수행하는 AutoCompleteBox를 상속받습니다.

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

문제가 해결되어 더 깨끗한 방법이 될 것이라고 확신하지만 시간을 낭비하지 않아도됩니다.