Как я могу обновить страницу без Навигации от моей MvvM Light ViewModel - PullRequest
0 голосов
/ 22 февраля 2012

Как обновить вложенный ListBox в моей модели просмотра (Mvvm ​​Light) без навигации по страницам после отображения начального представления. В настоящее время я делаю повторную навигацию по страницам, используя изменяющуюся строку запроса - должен быть лучший способ?

RaisePropertyChanged не имеет никакого эффекта, хотя я вижу, что данные заполнены правильными данными, когда сработал обратный вызов из запроса на мыло, инициированный через OpenCallingPoints.

Сетка, которую я пытаюсь заполнить данными мыла, - CallingPointsGrid

Короткая версия кода ...

<ListBox x:Name="ResultsListBox" Margin="0" VerticalAlignment="Top" ItemsSource="{Binding JourneyLegs, Mode=TwoWay}" Background="{StaticResource BackgroundWhiteGradientBrush}" >
 <ListBox.ItemTemplate>               
      <DataTemplate>
          <StackPanel x:Name="StationItem" Orientation="Vertical" VerticalAlignment="Top" background="{Binding id, Converter={StaticResource myconverter}}">

               <Grid Name="CallingPointsGrid" Margin="15,10,55,10"  Visibility="{Binding JourneyCallingPoints, Converter={StaticResource CallingPointsVisibilityConverter}}" Background="{StaticResource BackgroundWhiteGradientBrush}">
                   <ListBox Grid.Row="1" Name="CallingPointsListBox" DataContext="{Binding}" VerticalAlignment="Top" ItemsSource="{Binding JourneyCallingPoints, Mode=TwoWay}">
                         <ListBox.ItemTemplate>
                               <DataTemplate>
                                    <StackPanel VerticalAlignment="Top" Orientation="Horizontal">
                                           <TextBlock Margin="0" VerticalAlignment="Center" HorizontalAlignment="Left" Width="210" x:Name="Destination" Foreground="Black" Text="{Binding stationName}" />
                                           <TextBlock Margin="5,0,5,0" VerticalAlignment="Center" HorizontalAlignment="Left" Width="75" x:Name="ScheduledDepartureTime"  FontWeight="Bold" Foreground="{StaticResource BackgroundBlueLightSolidColor}" Text="{Binding timetable.scheduledTimes.arrival, StringFormat=\{0:HH:mm\}}" />
                                           <TextBlock Margin="5,0,5,0" VerticalAlignment="Center" HorizontalAlignment="Left" Width="75" x:Name="ScheduledArrivalTime"  FontWeight="Bold" Foreground="{StaticResource BackgroundBlueLightSolidColor}" Text="{Binding timetable.scheduledTimes.departure, StringFormat=\{0:HH:mm\}}" />
                                    </StackPanel>
                               </DataTemplate>
                          </ListBox.ItemTemplate>
                    </ListBox>

                   </Grid>
         </StackPanel>

        </DataTemplate>                       
 </ListBox.ItemTemplate>
 <i:Interaction.Triggers>
 <i:EventTrigger  SourceName="ResultsListBox" EventName="Tap">                            
  <i:EventTrigger.Actions>
        <local:OpenCallingPoints />                              
 </i:EventTrigger.Actions>                                                     
       </i:EventTrigger>                                          
 </i:Interaction.Triggers>

1 Ответ

0 голосов
/ 22 февраля 2012

Вы могли бы взглянуть на это: http://matthamilton.net/madprops-mvvmlight-screenconductor

Я собирался предложить вам взглянуть на Caliburn Micro и начал искать, чтобы увидеть, есть ли у Mvvm-Light что-то подобное.В этой статье об этом говорится.

Это одна из вещей, которые мне действительно нравятся в CM: когда вы наследуете свою ViewModel от Screen, вы автоматически получаете методы OnInitialize, OnActivate, OnDeactive, OnViewLoaded и OnViewReady, которые вы можете переопределить.Таким образом, в этом случае вы добавите эту логику в OnActivate.

На Windows Phone CM также автоматически проанализирует параметры строки запроса и заполнит ими свойство вашей виртуальной машины.

Это выглядитПодобно проводнику экрана, вы можете сделать то же самое с mvvm-light.

...