SL4 AutoCompleteBox重复过滤结果问题

时间:2011-02-28 11:45:20

标签: c# silverlight-4.0 autocompletebox

我遇到了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 个答案:

答案 0 :(得分:2)

此外,显示以前的结果,但对待它们是不存在的吗?我的意思是,选择它们不会改变自动完成框的值? 我有同样的问题,改变风格后得到它。在我的情况下,这是因为ListBox的风格。如果您使用自定义样式列表框,请尝试删除它&amp;使用默认样式。

答案 1 :(得分:1)

我最终继承了AutoCompleteBox捕获Populated事件并执行此hack。

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

它解决了这个问题,我确信有一个更清洁的方法,但我没有时间搞乱它。

相关问题