2013-08-16 9 views
6

Chcę dodać etykietę narzędzia w listboxItem, ale zaczyna się problem, gdy jest DisplayMemberPath. Komunikat o błędzie: nie można ustawić zarówno DisplayMemberPath, jak i ItemTemplate. Po usunięciu DisplayMemberPath działa podpowiedź na każdym elemencie listy. Ale nie chcę usunąć DisplayMemember, ponieważ potrzebuję go. Jak rozwiązać ten problem?C# wpf - nie można ustawić zarówno DisplayMemberPath, jak i ItemTemplate

   <ListBox x:Name="lstToys" Style="{DynamicResource ListBoxStyle1}" ItemsSource="{Binding Strings}" DisplayMemberPath="Toys" MouseDoubleClick="lstToys_MouseDoubleClick"> 
        <ListBox.ItemTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding}" ToolTip="Here is a tooltip"/> 
         </DataTemplate> 
        </ListBox.ItemTemplate> 
       </ListBox> 
+0

Umieść tę ścieżkę w DataTemplate Binding – Paparazzi

Odpowiedz

13

DisplayMemberPath jest w rzeczywistości, szablon dla pojedynczego obiektu, pokazane w TextBlock. Jeśli ustawisz:

<ListBox x:Name="lstToys" Style="{DynamicResource ListBoxStyle1}" 
     ItemsSource="{Binding Strings}" DisplayMemberPath="Toys"> 
</ListBox> 

Jest to odpowiednik:

<ListBox x:Name="lstToys" Style="{DynamicResource ListBoxStyle1}" 
     ItemsSource="{Binding Strings}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Toys}"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

można po prostu usunąć ścieżkę DisplayMemberPath i użyć wartości w twojej DataTemplate „s Binding:

<ListBox x:Name="lstToys" Style="{DynamicResource ListBoxStyle1}" 
     ItemsSource="{Binding Strings}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Toys}" ToolTip="Here is a tooltip!"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Edycja

Jeśli chcesz ustawić ToolTip ale zachować DisplayMemberPath, można to zrobić na ItemContainerStyle:

<ListBox x:Name="lstToys" Style="{DynamicResource ListBoxStyle1}" 
     ItemsSource="{Binding Strings}" DisplayMemberPath="Toys"> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="ToolTip" Value="Here's a tooltip!"/> 
     </Style> 
    </ListBox.ItemContainerStyle> 
</ListBox> 

radzę przeciwko niemu. Pamiętaj, że użycie DisplayMemberPath powstrzymuje cię od złożonego powiązania w szablonie danych.

+0

, ale nie chcę usunąć DisplayMemberPath, ponieważ jest ona powiązana z niektórymi utworzonymi funkcjami. – user235973457

+0

@ user235973457 Zobacz moją zmianę. Nadal nie możesz umieścić 'ItemTemplate', jeśli masz' DisplayMemberPath'. Jeśli potrzebujesz szablonów, musisz zmienić logikę (nie sądzę, że używanie DisplayMemberPath do niestandardowej logiki poza widokiem jest dobrym pomysłem). –

+0

działa jak bomba. Dzięki za radę. Będę o tym pamiętać :) – user235973457