W poniższym kodzie starałam się wyłuszczyć sedno problemu. TextBlock "ItemName" wyświetla się prawidłowo, za to w drugim MenuItem nie wyświetla się Header. Jak rozumiem, to zmiana DataContext wpływa na to, że nie mamy dostępu do ItemName... Jak wrócić do poprzedniego DataContext? ItemName jest polem klasy DocumentItem. Próbowałam różnych kombinacji z RelativeSource Self, ale nic mi nie działa.
Szerszy kontekst - jesteśmy w ListView, a to jest xaml opisujący ListViewItem. Komendy pochodzą z ViewModelu, a elementy ListView to lista znajdująca się w ViewModelu. Wykorzystuję MVVM Light.
<DataTemplate x:Key="SelectedItemDataTemplate" DataType="{x:Type common:DocumentItem}">
<Grid HorizontalAlignment="Stretch" x:Name="Root">
<TextBlock x:Name="ItemName" Text="{Binding ItemName}"></TextBlock>
<StackPanel x:Name="Buttons">
<ToggleButton x:Name="OptionsButton"
DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext}"
Style="{StaticResource DefaultToggleButton}">
<Grid>
<Popup x:Name="OptionsPopup"
PlacementTarget="{Binding ElementName=OptionsButton}"
IsOpen="{Binding ElementName=OptionsButton, Path=IsChecked, Mode=OneWay}"
DataContext="{Binding Path=PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}">
<StackPanel>
<MenuItem x:Name="InsertText"
Header="Insert text"
Command="{Binding InsertTextCommand}">
</MenuItem>
<MenuItem x:Name="SomethingElse"
Header="{Binding ItemName}"
Command="{Binding DoSomethingElseCommand}">
</MenuItem>
</StackPanel>
</Popup>
</Grid>
</ToggleButton>
</StackPanel>
</Grid>
</DataTemplate>