Поиск ключа в WPF ListView - PullRequest
       19

Поиск ключа в WPF ListView

2 голосов
/ 22 ноября 2011

Я использую 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.ListView будет подсвечивать следующий элемент каждый раз, когда вы вводите символ T.

Потратив некоторое время на поиск проблемы, я разыскиваю ее потому, что у моего объекта customer есть пространство имен TestMVVMProject, поэтому я думаю, что функция ToString() для объекта customer всегда возвращает TestMVVMProject.Customer

Может кто-нибудь дать мне представление о том, как остановить это поведение?

Ответы [ 2 ]

0 голосов
/ 24 ноября 2011

Это потому, что по умолчанию ListView реализует возможность поиска текста.Вы можете остановить это, используя свойство IsTextSearchEnabled в списке.Попробуйте

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

Это должно отключить текстовый поиск, когда вы не хотите его.

0 голосов
/ 22 ноября 2011

Изменить: После некоторого расследования я нашел следующее решение:

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

Надеюсь, это поможет.

Оригинальный ответ:

Просто переопределите ToString() в View Model, и вы получите правильное поведение.

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

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