2015-07-09 6 views
1

Я использую ListView показать именует лиц список с помощью шаблона данных:ListViewItem не выбран, когда я нажал на текстовой области

<Windows.Resources> 
    <DataTemplate Datatype="{x:Type local:Person}"> 
    <ListViewItem Content="{Binding Path=Name}"> 
    </DataTemplates> 
</Windows.Resources> 
<ListView Name="myList" itemSource="{Binding}"> 

код за это

ObservableCollection<Person> lst = SomeMethod(); 
myList.DataContext = lst; 

ListView шоу имена людей, но когда я нажимаю именно на имена, ничего не происходило (элемент не сфокусирован, а событие SelectionChanged не работает), но если я нажимаю в правой части имени в списке, он работает

Я думаю, что связано с datatemple, потому что когда я удалил шаблон и переопределил метод ToString для того, чтобы вернуть this.Name, он отлично работает.

любые идеи?

Спасибо.

+0

Попробуйте поместить рамку вокруг вашего ListViewItem в шаблон. Может быть, это помогает? –

ответ

0

Вы не должны использовать ListViewItem, который является ContentControl, внутри DataTemplate, который обычно описывают, как содержание должно быть показано внутри ContentControls, а не наоборот: P

Ваш DataTemplate генерирует этот (упрощенное) визуальное дерево:

ListView 
    ItemsPresenter 
     ListViewItem 
      ContentPresenter 
       ListViewItem 

Дополнительный элемент ListViewItem, вероятно, проглатывает событие Click. Вместо этого используйте текст TextBlock для отображения текста, а регулярное поведение ListViewItem должно работать по назначению.

<DataTemplate Datatype="{x:Type local:Person}"> 
    <TextBlock Text="{Binding Path=Name}"> 
</DataTemplates> 
+0

Спасибо almulo! Оно работает. –

+0

Добро пожаловать! :) – almulo

 Смежные вопросы

  • Нет связанных вопросов^_^