LongListSelector和ContextMenu返回错误的项目

时间:2013-02-19 10:40:18

标签: c# wpf silverlight windows-phone-7

我在页面中有LongListSelector

<Controls:LongListSelector Height="Auto" x:Name="historylist" HorizontalContentAlignment="Stretch"  
                                   Background="Black" SelectionChanged="DidPressSelectItem">
            <Controls:LongListSelector.ItemTemplate>
                <DataTemplate>
                    <local:SearchTemplateSelector Content="{Binding}" HorizontalContentAlignment="Stretch">
                        <toolkit:ContextMenuService.ContextMenu>
                            <toolkit:ContextMenu Opened="ContextMenu_Opened">
                                <toolkit:MenuItem Header="Edit" Click="EditVideo"/>
                            </toolkit:ContextMenu>
                        </toolkit:ContextMenuService.ContextMenu>
.
.
.
.
                   </local:SearchTemplateSelector>
                </DataTemplate>


            </Controls:LongListSelector.ItemTemplate>

这是EditVideo

private void EditVideo(object sender, RoutedEventArgs e)
    {
        VideoItem selectedVideo = (sender as MenuItem).DataContext as VideoItem;
        if (video == null) { return; }

        //Do Stuff

        this.RelodeTableData();
    }

RelodeTableData

private void RelodeTableData()
    {
        System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() =>
        {
            searchResults.Clear();
            for (int i = 0; i < historyRep.historyArray.Count; i++)
            {
                VideoItem item = historyRep.historyArray[i];
                searchResults.Add(item);
            }
        });
    }

问题在于,当用户编辑项目并尝试编辑其他项目后,他会在selectedVideo中获得他编辑的最后一项。

我在编辑后使用ReloadTableData刷新列表数据。

1 个答案:

答案 0 :(得分:11)

好好经过大量的搜索后如何解决这个问题。我发现如果我将Unload方法添加到ContextMenu,这很清楚DataContext。

private void ContextMenu_Unload(object sender, RoutedEventArgs e)
    {
        ContextMenu conmen = (sender as ContextMenu);
        conmen.ClearValue(FrameworkElement.DataContextProperty);
    }