我有像这样的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更新这个flipview ItemsSource。现在我的问题是当我从VM更新ItemsSource并使用NotifyPropertyChanged()
通知View更新flipview ItemsSource时,我选择的flipview没有用新数据更新视图。
但是在我走动之后&gt;视图正确更新的2项(下一个/上一个)项目。如何强制我的flipview更新当前所选项目而无需重新加载flipview?
答案 0 :(得分:2)
我认为BookPagesNew需要实现接口INotifyPropertyChanged
因为如果您只更改列表中某个项目的一个属性,则视图不会收到通知。
您可以使用此代码实现界面
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));
}
}
}
您的虚拟机BookPagesNew
中的应为ObservableCollection<BookPagesNew>