2015-09-21 81 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>

相關問題