Контекстное меню ListViewItem Получить данные из ListViewItem - PullRequest
0 голосов
/ 09 января 2012

Я пытаюсь создать контекстное меню, чтобы при щелчке правой кнопкой мыши на ListViewItem пользователю отображался список параметров.Проблема в;Я не могу получить связанный элемент, связанный с ListViewItem в событии Click.

Я думаю, это может быть потому, что я помещаю ContextMenu в неправильном месте в моем XAML.Я искал и играл в течение многих лет, но думаю, что это может иметь какое-то отношение к DataTemplate, который я использую там, где примеров не было в шаблонах.

<ListView Margin="0" Name="FileImagesListView"  VerticalAlignment="Top" Grid.Row="0">                             
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <EventSetter Event="Mouse.MouseEnter" Handler="MouseEnterPicFileListItem" />
            <EventSetter Event="Mouse.MouseLeave" Handler="MouseLeavePicFileListItem"/>          
        </Style>      
    </ListView.ItemContainerStyle>

    <ListView.ItemTemplate>
        <DataTemplate>
            <Border BorderBrush="{Binding Path=BorderBrushColourID, Converter={StaticResource BorderColourConverter}}" BorderThickness="3" CornerRadius="2">
                <StackPanel FlowDirection="LeftToRight"  Orientation="Vertical" Margin="3">
                    <Grid>
                        <TextBlock TextAlignment="Center" Text="{Binding Path=TimeAgo}" Margin="0,7" ></TextBlock>
                        <Label Style="{StaticResource CircularLabel}" HorizontalAlignment="Right" Height="35" Margin="0,-8,0,0" Content="{Binding Path=MatchedCount}" Visibility="{Binding Path=MatchedCount, Converter={StaticResource VisibleIfGreaterThanOne}}" ></Label>
                    </Grid>
                    <Image Name="FilePic" Height="Auto" Width="160" Source="{Binding Path=BitmapPicture}"></Image>
                </StackPanel>
            </Border>
        </DataTemplate>
    </ListView.ItemTemplate>

    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Margin="3" Orientation="Horizontal"></StackPanel>
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
</ListView>

1 Ответ

1 голос
/ 09 января 2012

Обычно вы можете получить элемент данных, просто позвонив по номеру myListViewItem.DataContext и приведя его к тому, кем он должен быть.

private void ListViewItem_Click(object sender, EventArgs e)
{
    ListViewItem item = sender as ListViewItem;
    if (item == null) return;

    MyDataItem = item.DataContext as MyDataItem;

    // Do whatever here
}

В качестве примечания, WPF ContextMenus не разделяет тот же VisualTree, что и ваше приложение.поэтому попытка привязать их к вашему основному интерфейсу работает иначе.Трудно сказать, связано ли это с вашей проблемой, потому что я не вижу в вашем вопросе события ContextMenu или Click.

Edit Если ваше ContextMenu находится в ListBoxItem, то вынеобходимо обратиться к PlacementTarget вашего ContextMenu, чтобы получить ListBoxItem, к которому ContextMenu присоединен

...