2

私はこのようなFlipViewを持っています

<FlipView Grid.Row="1" Grid.RowSpan="2" HorizontalContentAlignment="Center" x:Name="BookPageContentFlipView" ItemsSource="{Binding BookPagesNew,Mode=OneWay}"
                  SelectedItem="{Binding SelectedPage,Mode=TwoWay}"
                  SelectionChanged="BookPageContentFlipViewSelectionChanged" >
            <FlipView.ItemsPanel>
                <ItemsPanelTemplate>
                    <VirtualizingStackPanel Background="Transparent" Orientation="Horizontal"
                                            VirtualizationMode="Recycling" AreScrollSnapPointsRegular="True" />
                </ItemsPanelTemplate>
            </FlipView.ItemsPanel>
            <FlipView.ItemTemplate>
                <DataTemplate>
                    <Grid HorizontalAlignment="Center" Width="650" x:Name="GridWebView">
                        <WebView
                            common:HTMLStringExtension.HTML="{Binding HTMLString}" 
                            ScriptNotify="OnBookPageContentWebViewScriptNotify"
                            Tapped="OnBookPageContentFlipViewTapped" />
                        <Image Source="ms-appx:///Assets/add-bookmark.png" x:Name="BookmarkImage"
                               Tapped="OnBookmarkImageTapped" HorizontalAlignment="Right" VerticalAlignment="Top"
                               Width="38"
                               Height="38" />
                    </Grid>
                </DataTemplate>
            </FlipView.ItemTemplate>

        </FlipView>

私はMVVMを使用しており、VMからこのフリップビューItemsSourceを更新しています。ここで私の問題は、VM から ItemsSourceNotifyPropertyChanged()を更新し、ビューに通知してフリップビュー ItemsSource を更新するときに、選択したフリップビューが新しいデータでビューを更新しないことです。

しかし、2 つ以上の項目 (次/前) の項目を移動した後、ビューは正しく更新されました。フリップビューをリロードせずに、現在選択されているアイテムを強制的に更新するにはどうすればよいですか?

4

1 に答える 1

2

INotifyPropertyChanged リスト内の項目の 1 つのプロパティのみを変更すると、ビューは通知を受け取らないため、BookPagesNew はインターフェイスを実装する必要があると思います。

このコードを使用してインターフェースを実装できます

public class BookPagesNew : INotifyPropertyChanged
{
    public string HTMLString { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;

    public void RaisePropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

あなたのVMBookPagesNewではObservableCollection<BookPagesNew>

于 2015-09-30T13:01:20.203 に答える