5

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

2 に答える 2

2

また、以前の結果が表示されますが、存在しないものとして扱われますよね? つまり、それらを選択してもオートコンプリートボックスの値は変更されませんか? スタイルを変更した後に同じ問題が発生しました。私の状況では、ListBox のスタイルが原因です。リストボックスにカスタム スタイルを使用している場合は、それを削除してデフォルト スタイルを使用してみてください。

于 2011-04-03T13:45:55.167 に答える
1

私は AutoCompleteBox を継承して Populated イベントをキャプチャし、このハックを実行しました。

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

問題は解決しました。もっとクリーンな方法があると思いますが、いじる時間がありませんでした。

于 2011-04-07T09:18:04.333 に答える