Оригинальный ответ
Должна ли деталь быть в отдельном контейнере? Возможно, я неправильно понимаю ваш пример, но я бы подумал, что вы могли бы достичь того, чего хотели, добавив раздел сведений в шаблон элемента для элементов списка, а затем скрыть / показать его на основе флага IsSelected:
<ListView ItemsSource="{Binding}">
<ListView.ItemTemplate>
<DataTemplate>
<DockPanel>
<ContentControl DockPanel.Dock="Right" Name="DetailsControl" Content="{Binding}" ContentTemplate="{StaticResource DetailsTemplate}" />
<TextBlock Text="{Binding}" />
</DockPanel>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding (ListViewItem.IsSelected), RelativeSource={RelativeSource FindAncestor, AncestorType=ListViewItem}}" Value="False">
<Setter TargetName="DetailsControl" Property="Visibility" Value="Hidden" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Даже если вы не следите именно за этим поведением, я думаю, вы могли бы приблизиться к тому, что вы хотите, заменив ContentControl из примера на что-то другое (например, всплывающее окно)
Редактировать в ответ на комментарии
Пример ниже поместит Popup
справа от ListView
, который виден только для выбранного элемента:
<ListView ItemsSource="{Binding}">
<ListView.ItemTemplate>
<DataTemplate>
<DockPanel>
<TextBlock Text="{Binding}" />
<Popup Placement="Right"
PlacementTarget="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListViewItem}}"
IsOpen="{Binding (ListViewItem.IsSelected), RelativeSource={RelativeSource FindAncestor, AncestorType=ListViewItem}}">
<Border Background="Black" Padding="3">
<TextBlock Text="{Binding}" />
</Border>
</Popup>
</DockPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
При этом используется атрибут Placement
, чтобы указать, что Popup
должен отображаться справа от целевого элемента, и привязывается свойство PlacementTarget
к первому предку типа ListViewItem
(то есть к родительскому контейнеру).
Это вызывает появление, как в примере ниже: