我正在开发一个有点大的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本身
答案 0 :(得分:0)
想出来。必须在UI线程上调用对ItemCategories的更改:
((MainView)view).Dispatcher.BeginInvoke(() =>
{
ItemCategories = new ObservableCollection<ItemCategory>(App.ItemCategories);
});