0

我正在做一个有点大的 WP7 项目,我目前的任务是实现离线功能。

我有一个列表框,它应该只在设备连接到互联网时显示项目,否则显示一个空视图。

我已经连接了一个事件处理程序,它在连接更改时触发,如果我有连接,我会在其中检索列表框的必要数据。

问题是当我在离线模式下运行应用程序,然后打开 Wi-fi 时,列表框的数据会更新,但 UI 本身不会更新

这是 XAML:

<ListBox Name="lstItemCategories" ItemsSource="{Binding ItemCategories, Mode=TwoWay}"  SelectedItem="{Binding SelectedItemCategory, Mode=TwoWay}" Margin="0,-15,0,60" Tap="lstItemCategories_Tap">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal" Margin="0,0,0,0" Height="78" Width="432">
                                <Image Height="70" Width="70" HorizontalAlignment="Right" Name="image1" Stretch="Uniform"  Source="{Binding ImagePath}" />
                                <ListBoxItem toolkit:TiltEffect.IsTiltEnabled="True">
                                    <TextBlock Text="{Binding Description}" VerticalAlignment="Center" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}" Foreground="{StaticResource darkGrey}"/>
                                </ListBoxItem>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

在 ViewModel 中,我有一个用于绑定的 ObservableCollection:

    public ObservableCollection<ItemCategory> ItemCategories
    {
        get { return itemCategories; }
        set
        {
            itemCategories = value;
            NotifyPropertyChanged("ItemCategories");
        }
    }

而且我有一个后台工作者,它可以在设备连接到互联网后检索我需要的项目,以及 RunWorkerCompleted 方法:

void itemCategoryWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    App.ItemCategories = (List<ItemCategory>)e.Result;

    ItemCategories = new ObservableCollection<ItemCategory>(App.ItemCategories);
}

因此,连接到 UI 的 ItemCategories 属性会更新,但不会更新 UI 本身

4

1 回答 1

0

弄清楚了。必须在 UI 线程上调用对 ItemCategories 的更改:

((MainView)view).Dispatcher.BeginInvoke(() =>
                {
                    ItemCategories = new ObservableCollection<ItemCategory>(App.ItemCategories);
                });
于 2013-08-08T13:20:26.940 回答