c# wpf-не удается установить DisplayMemberPath и ItemTemplate

Я хочу добавить подсказку в listboxItem, но она начинает проблему, когда есть DisplayMemberPath. Сообщение об ошибке: не удается установить DisplayMemberPath и ItemTemplate. Когда я удалил DisplayMemberPath, всплывающая подсказка в каждом элементе списка работает. Но я не хочу удалять DisplayMemember, потому что мне это нужно. Как решить эту проблему?

               <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>

1 ответов


DisplayMemberPath является, по сути, шаблоном для одного свойства, показанного в TextBlock. Если вы установили:

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

это эквивалентно:

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

вы можете просто удалить DisplayMemberPath путь и использовать значение в вашей 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>

редактировать

если вы хотите установить ToolTip но сохранить DisplayMemberPath, вы можете сделать это на 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>

Я бы не советовал. Помните, что использовать DisplayMemberPath останавливает вас от любой сложной привязки в вашем шаблоне данных.