Multi-Column Selector - PullRequest
       15

Multi-Column Selector

1 голос
/ 09 октября 2009

Я ищу какой-то гибрид ComboBox и ListView, и мне интересно, почему ничего подобного не существует, хотя я чувствую, что это вполне естественное желание иметь его.

Более подробно: WPF ItemsControl должен иметь ItemsSource всех применимых элементов. Эти элементы имеют несколько свойств, скажем ID: int, Name: string и Description: string. Теперь мой ItemControl должен:

  1. Показать эти три свойства в виде хорошо выровненных столбцов в раскрывающемся списке в виде комбобокса
  2. Обеспечьте некоторый способ быстрого поиска элемента, просто набрав текст в одном текстовом поле (без указания, какое свойство должно быть найдено). Это должно либо выбрать первое совпадение, либо отфильтровать элементы, скрывающие все несоответствующие.

Ключевым моментом является то, что элемент управления можно использовать без мыши, но он также предоставляет режим «проводника», если пользователь не помнит идеально идентифицирующий идентификатор, а только части некоторого описания или имени. Настраиваемая «функция поиска» была бы хороша, и не было бы проблем, если бы вам нужно было явно указать все свойства, которые будут включены в функцию поиска или отображения.

1 Ответ

2 голосов
/ 10 октября 2009

Пока такого контроля нет, но вы, конечно, можете легко его настроить,

Создайте пользовательский элемент управления C # и определите шаблон элемента управления как Expander, содержащий DataGrid / ListView.

Вы можете определить свойства зависимостей вашего пользовательского элемента управления, необходимые для ListView, и выполнить привязку шаблона для них. Заголовок Expander должен быть привязан к тексту выбранного элемента или к какому-либо текстовому представлению ваших объектов.

Альтернатива:

Добавьте СЕТКУ внутри шаблона элемента и определите его определения столбцов. И вы можете легко указать значения нескольких столбцов в GRID.

<ComboBox>
   <ComboBox.ItemTemplate>
       <DataTemplate>
           <Grid>
                <Grid.ColumnDefinitions>
                     <ColumnDefinition Width="100"/>
                     <ColumnDefinition Width="200"/>
                     <ColumnDefinition Width="100"/>
                </Grid.ColumnDefinitions>
                <TextBlock Grid.Column="0" Text="{Binding CustomerName}"/>
                <TextBlock Grid.Column="1" Text="{Binding CustomerEmail}"/>
                <TextBlock Grid.Column="2" Text="{Binding CustomerPhone}"/>
           </Grid>
       </DataTemplate>
   </ComboBox.ItemTemplate>
</ComboBox>

Правильно применяя ширину и задавая поля для текстового блока, вы можете легко создать список из нескольких столбцов. Не забудьте свойство TextSearch.SearchPath, чтобы иметь возможность выбирать элемент с помощью клавиатуры.

...