2011-02-28 12 views
5

Tengo un problema con el filtrado de AutoCompleteBox.SL4 AutoCompleteBox resultados de filtro de repetición problema

Parece que está volviendo a poner el filtro anterior.

Por ejemplo, tecleo 'A' y devuelve 1 elemento. Elimino la 'A' y escribo 'Z', que debería devolver 1 elemento.

El problema es que devuelve los resultados del filtro 'A' más la 'Z', elimino 'Z' y escribo 'S', que trae de vuelta 2 elementos y ahora muestra los resultados de los 3 filtros.

¿Estoy haciendo algo mal?

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; 
}; 

Respuesta

2

Además, se muestran los resultados anteriores, pero se tratan como si no existieran ¿no? Quiero decir, seleccionarlos no cambia el valor del autocompletarbox? Tengo el mismo problema, lo tengo después de cambiar el estilo. En mi situación, es por el estilo de ListBox. Si está utilizando un estilo personalizado para listbox, intente eliminarlo & use el estilo predeterminado.

+0

Perfecto, gracias. Fue el tema cosmopolita el que me lo rompió –

1

Terminé heredando AutoCompleteBox capturando el evento Poblado y realizando este truco.

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

Se solucionó el problema, estoy seguro de que hay una forma más limpia de hacerlo pero no tienen tiempo para perder el tiempo con él.

Cuestiones relacionadas