首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WP7 webclient在Application_Launching中的应用

WP7 webclient在Application_Launching中的应用
EN

Stack Overflow用户
提问于 2012-04-26 16:47:57
回答 2查看 469关注 0票数 2

我使用两个不同的app客户端来提取数据以显示在我的应用程序的主页上。我想在用户到达主页之前将这段代码移动到app.xaml.cs下载数据。我不知道如何在主页上为我的列表设置条目源。到目前为止我的情况是这样的。

Application_Launching中的代码

代码语言:javascript
复制
     private void Application_Launching( object sender, LaunchingEventArgs e)
    {
        // WebClient jsonGenres
        WebClient jsonGenres = new WebClient();
        Uri apiGenres = new Uri( "http://api.beatport.com/catalog/3/genres" );
        jsonGenres.DownloadStringCompleted += newDownloadStringCompletedEventHandler (jsonGenres_GetDataCompleted);
        jsonGenres.DownloadStringAsync(apiGenres);

        // WebClient jsonHome
        WebClient jsonHome = new WebClient();
        Uri apiHome = new Uri ("http://api.beatport.com/catalog/3/beatport/home" );
        jsonHome.DownloadStringCompleted += newDownloadStringCompletedEventHandler (jsonHome_GetDataCompleted);
        jsonHome.DownloadStringAsync(apiHome);

    }

    // Deserialize genres data
    public void jsonGenres_GetDataCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        GenresHome genresData = JsonConvert.DeserializeObject<GenresHome>(e.Result);

        ViewModel.Genres = genresData.results;
        //this.listGenres.ItemsSource = genresData.results;
    }

    // Deserialize home page data
    public void jsonHome_GetDataCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        ReleasesHome homeData = JsonConvert.DeserializeObject<ReleasesHome>(e.Result);

        const int limit = 6;
        ViewModel.Releases = homeData.results.featuredReleases.Take(limit);
        //this.listRelease.ItemsSource = homeData.results.featuredReleases.Take(limit);
    }

还有我的主页xaml代码。

代码语言:javascript
复制
                <ListBox x:Name="listRelease" ItemsSource="{Binding ReleasesHome}" Grid.Row="0" ScrollViewer.VerticalScrollBarVisibility="Disabled" >
                    <ListBox.ItemsPanel>
                        <ItemsPanelTemplate>
                            <toolkit:WrapPanel Orientation="Horizontal" />
                        </ItemsPanelTemplate>
                    </ListBox.ItemsPanel>
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Vertical">
                                <toolkit:HubTile Source="{Binding images.large.url}" MouseLeftButtonUp="releaseSelectedHandler" Margin="10" IsFrozen="True" />
                                <TextBlock Text="{Binding name}" Width="173" />
                                <ListBox ItemsSource="{Binding artists}" Height="28" ScrollViewer.VerticalScrollBarVisibility="Disabled" >
                                    <ListBox.ItemTemplate>
                                        <DataTemplate>
                                            <TextBlock Text="{Binding name}" Margin="10,0,0,0" Width="173" Style="{StaticResource PhoneTextSubtleStyle}" />
                                        </DataTemplate>
                                    </ListBox.ItemTemplate>
                                </ListBox>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </Grid>
        </controls:PanoramaItem>

    <!--Panorama item four-->          
    <controls:PanoramaItem x:Name="genres" Header="genres">
    <!--Single line list-->
            <Grid>
                <ListBox x:Name="listGenres" ItemsSource="{Binding GenresHome}">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Vertical">
                                <TextBlock x:Name="genresTxtBlock" Text="{Binding name}" MouseLeftButtonUp="genreSelectedHandler" Margin="10,5,0,0" Style="{StaticResource PhoneTextExtraLargeStyle}" />                                      
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>       
            </Grid>        
    </controls:PanoramaItem>

谢谢你的帮助。

更新

请参阅上面更新的代码和下面的ViewModel

代码语言:javascript
复制
public class MainViewModel : INotifyPropertyChanged
{
    public MainViewModel()
    {

    }

    private IEnumerable<ResultGenreHome> _genres; // backing field
    public IEnumerable<ResultGenreHome> GenresHome
    { 
        get { return _genres; }
        set
        {
            _genres = value;
            OnPropertyChanged("GenresHome");
        }
    }

    private IEnumerable<FeaturedReleasesHome> _releases; // backing field
    public IEnumerable<FeaturedReleasesHome> ReleasesHome
    {
        get { return _releases; }
        set
        {
            _releases = value;
            OnPropertyChanged("ReleasesHome");
        }
    }

    private void OnPropertyChanged(string p)
    {
        throw new NotImplementedException();
    }

    public bool IsDataLoaded
    {
        get;
        private set;
    }

    public void LoadData()
    {
        this.IsDataLoaded = true;
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(String propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (null != handler)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

我已经在主页后面的代码中设置了数据文本。这是我第一次使用ViewModel,所以我不太确定我应该在这里放什么。该应用程序运行时没有任何问题,但没有显示任何数据。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-26 17:44:36

查看默认的"Windows数据库应用程序“Windows项目。这个项目有一个它在应用程序中创建的ViewModel,这个ViewModel由MainPage使用。然后,MainPage使用绑定来获取它需要的数据。您可以从应用程序中设置ViewModel中的数据

代码语言:javascript
复制
ViewModel.Genres = genresData.results;

那么你的xaml看起来就像

代码语言:javascript
复制
<ListBox ItemsSource="{Binding Genres}">
    ...
</ListBox>

为了在设置类型时更新UI,ViewModel中的属性必须触发PropertyChanged事件。

代码语言:javascript
复制
private IEnumerable<Genre> _genres; // backing field
public IEnumerable<Genre> Genres
{ 
    get { return _genres; }
    set
    {
        _genres = value;
        OnPropertyChanged("Genres");
    }
}

发布部分也是一样的。

票数 0
EN

Stack Overflow用户

发布于 2012-04-26 16:52:20

可以向App类添加一个属性,并将其设置为保存已下载和反序列化的数据。

您所要做的就是使用此属性加载页面的数据文本。

编辑

覆盖App类的OnStartup并从App.xaml中删除StartURI:

base.OnStartUp(e);Window1 w=新Window1();w.DataContext = ViewModel;this.MainWindow = w;w.Show();

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10337825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档