如何在没有 MvvM Light ViewModel 导航的情况下刷新页面

发布于 2025-01-08 06:06:51 字数 2983 浏览 3 评论 0原文

显示初始视图后,如何在没有页面导航的情况下更新视图模型 (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>

How do I update a nested ListBox in my viewmodel (Mvvm Light) without page navigation after the initial view has been displayed. Currently I am doing a re-entrant page navigation using a changing querystring - there must be a better way?

RaisePropertyChanged is having no effect although I can see the data is populated with the correct data when the callback from the soap request triggered via OpenCallingPoints has fired.

The grid I am trying to populate with soap data is CallingPointsGrid

Short version of the code...

<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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无敌元气妹 2025-01-15 06:06:51

你可能会看看这个:
http://matthamilton.net/madprops-mvvmlight-screenconductor

我建议你看看Caliburn Micro 正在四处寻找 Mvvm-Light 是否有类似的东西。那篇文章谈到了这一点。

这是我真正喜欢 CM 的事情之一,当您从 Screen 继承 ViewModel 时,您会自动获得可以重写的 OnInitialize、OnActivate、OnDeactive、OnViewLoaded 和 OnViewReady 方法。因此,在这种情况下,您可以将该逻辑保留在 OnActivate 中。

在 Windows Phone 上,CM 还会自动解析查询字符串参数并使用它们填充 VM 上的属性。

看起来屏幕导体允许你用 mvvm-light 做类似的事情。

You might look at this:
http://matthamilton.net/madprops-mvvmlight-screenconductor

I was going to suggest you look at Caliburn Micro and was searching around to see if Mvvm-Light had something similar. That article talks about that.

That's one of the things I really like about CM, when you inherit your ViewModel from Screen you automatically get OnInitialize, OnActivate, OnDeactive, OnViewLoaded, and OnViewReady methods you can override. So in this case you'd stick that logic in OnActivate.

On windows phone CM will also auto parse out the query string parameters and populate a property on your VM with them.

It looks like the screen conductor allows you to do similar with mvvm-light.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文