2015-09-21 3 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 и обновить этот FlipView ItemsSource из VM. Теперь моя проблема в том, что когда я обновляю ItemsSource от VM и использую NotifyPropertyChanged(), чтобы уведомить View, чтобы обновить Flipview ItemsSource, мой выбранный flipview не обновляет представление новыми данными.

Но после того, как я переместился> элемент 2 (следующий/предыдущий), изображение правильно обновлено. Как я могу заставить свой flipview обновить выбранный вами элемент без необходимости перезагрузки flipview?

+0

Если я правильно понял, вы обновляете HTMLString свойства каждых элементов. Могут ли ваши модели внедрять INotifyPropertyChanged? Проверьте это, и если вы можете дать образец проекта. –

+0

Нужна ли моей модели INotifyPropertyChanged? Даже я уже использую его в моей ViewModel? – albilaga

+1

Да, если вы хотите изменить значение свойства 'Item.HTMLString =" новое значение ";' Item также должен реализовать INotifyPropertyChanged, иначе просмотр не получит никакого уведомления. Подробнее о Binding и INotifyPropertyChanged http://bit.ly/1O42Cb0. Вы можете использовать библиотеку Fody для реализации этого интерфейса, проверьте это https://github.com/Fody/PropertyChanged Я надеюсь, что это будет полезно для вас. –

ответ

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>

Смежные вопросы