WPF ListView密钥搜索问题

时间:2011-11-22 03:21:42

标签: wpf listview wpf-controls

我正在使用MVVM在ListView中显示列表数据。 ListView非常简单如下:

<ListView HorizontalAlignment="Stretch"
          VerticalAlignment="Stretch"
          ItemsSource="{Binding Customers}">
        <ListView.View>
            <GridView>
                <GridViewColumn DisplayMemberBinding="{Binding FirstName}">
                    <GridViewColumnHeader Width="100" Content="First Name" />
                </GridViewColumn>

                <GridViewColumn DisplayMemberBinding="{Binding LastName}">
                    <GridViewColumnHeader Width="100" Content="Last Name" />
                </GridViewColumn>
            </GridView>
        </ListView.View>

    </ListView>

我将客户对象列表绑定到ListView中,当我在ListView中突出显示一个项目并开始键入T时出现问题。每次键入T字符时,ListView都会突出显示下一个项目。

通过花一些时间来找出问题,我追踪它是因为我的客户对象有名称空间TestMVVMProject所以我认为客户对象的ToString()函数总是返回{{1} }

有谁能告诉我如何制止这种行为?

2 个答案:

答案 0 :(得分:0)

修改 经过一番调查后,我找到了下一个解决方案:

<ListView 
    TextSearch.TextPath="FirstName"
    ...>

希望这会有所帮助。

原始回答:

在视图模型上覆盖ToString(),您将获得正确的行为。

public class Customer
{
    public string Name { get; set; }

    public override string ToString()
    {
        return this.Name;
    }
}

答案 1 :(得分:0)

这是因为默认情况下ListView实现了文本搜索功能。您可以通过在列表框上使用IsTextSearchEnabled属性来阻止此行为。试试

<ListView HorizontalAlignment="Stretch"
      VerticalAlignment="Stretch"
      ItemsSource="{Binding Customers}" 
      IsTextSearchEnabled="False">

这应该在您不需要时禁用文本搜索。