2015-09-21 47 views
2

我FlipView这样Flipview不更新的SelectedItem

<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不会用新数据更新视图。

但是当我移动了> 2项目(下一个/上一个)项目后,视图正确更新。我如何强制我的flipview更新当前选定的项目,而无需重新加载flipview?

+0

。您的模型是否实现INotifyPropertyChanged?检查这个,如果你可以给样品项目。 –

+0

我的模型是否也需要INotifyPropertyChanged?即使我已经在ViewModel中使用它了? – albilaga

+1

是的,如果你想改变属性的值Item.HTMLString =“new value”; Item还必须实现INotifyPropertyChanged,否则视图不会得到任何通知。 了解更多关于绑定和INotifyPropertyChanged http://bit.ly/1O42Cb0。 你可以使用Fody库来实现这个接口,检查这个https://github.com/Fody/PropertyChanged 我希望这会对你有所帮助。 –

回答

2

我认为BookPagesNew需要实现接口INotifyPropertyChanged ,因为如果您只更改列表中项目的一个属性,则视图不会收到通知。

如果我理解正确的话,你更新每个元素的HTMLString属性,您可以使用此代码来实现接口

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>

相关问题