3

私はこれ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 を使用して、編集後にリスト データを更新します。

4

1 に答える 1

11

この問題を修正する方法をたくさん検索した後、わかりました。Unloadにメソッドを追加するContextMenuと、DataContextがクリアされます。

private void ContextMenu_Unload(object sender, RoutedEventArgs e)
    {
        ContextMenu conmen = (sender as ContextMenu);
        conmen.ClearValue(FrameworkElement.DataContextProperty);
    }
于 2013-02-19T13:14:30.050 に答える