识别属性

Identifying properties

我想将 3 个任务存储在 collection 中,但也能够在 collection 中识别它们。即哪些 "link, image, title" 属于收藏,哪些属于新的,哪些属于精选,就像在 Url 的列表中一样。如果你能给我看代码,我将不胜感激。

这是我的代码:

 private List<string> urlList()
    {
        List<string> urls = new List<string>
        {
            "http:favorite.com,
            "http://new.com",
            "http://feature.com"
        };
        return urls;
    }

 async Task GetData()
    {
        HttpClient client = new HttpClient();
        client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36");
        List<string> taskurl = urlList();
        IEnumerable<Task<int>> downloadTaskQuery =
            from url in taskurl select ProcessURL(url, client);
        List<Task<int>> downloadTask = downloadTaskQuery.ToList();
        while (downloadTask.Count > 0)
        {
            Task<int> firstFinishTask = await Task.WhenAny(downloadTask);
            downloadTask.Remove(firstFinishTask);
            int lenght = await firstFinishTask;
        }
    }

 private async Task<int> ProcessURL(string url, HttpClient client)
    {
        HttpResponseMessage response = await client.GetAsync(url);
        var urlContent = await response.Content.ReadAsStringAsync();
var article = new Observable<Article>();
            foreach (var div in htmlDocument.DocumentNode.Descendants().Where(i => i.Name == "div" && i.GetAttributeValue("class", "").StartsWith("foo")))
            {
        return something;
    }    
}

}

正如我们昨天讨论的那样,如果分组列表可以解决您的问题,您可以这样做:

<Page.Resources>
    <CollectionViewSource x:Name="listViewItems" IsSourceGrouped="True" />
    <DataTemplate x:Name="listViewItemTemplate">
        <TextBlock Text="{Binding BookAddress}" FontSize="20" />
    </DataTemplate>
</Page.Resources>

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <ListView x:Name="listView" ItemsSource="{x:Bind listViewItems.View}" ItemTemplate="{StaticResource listViewItemTemplate}">
        <ListView.GroupStyle>
            <GroupStyle>
                <GroupStyle.HeaderTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Key}" FontSize="25" Foreground="Red" />
                    </DataTemplate>
                </GroupStyle.HeaderTemplate>
            </GroupStyle>
        </ListView.GroupStyle>
    </ListView>
</Grid>

后面的代码很清楚:

public MainPage()
{
    this.InitializeComponent();
    listViewItems.Source = Headers.GetItemsGrouped();
}

我从你的代码中发现你将数据放在一个名为"urls"的字符串List中,我将继续使用这个List作为我"Headers"class中的数据源,并且我的 "Headers" class 也是这样:

public class Headers
{
    public string HeaderTitle { get; set; }

    public Headers()
    {
        HeaderTitle = string.Empty;
    }

    private static List<string> urls = new List<string>
    {
        "http://favorite.com",
        "http://new.com",
        "http://feature.com",
        "http://favorite.book1.com",
        "http://new.book2.com",
        "http://feature.book3.com",
        "http://favorite.book4.com",
        "http://new.book5.com",
    };

    public static ObservableCollection<BookList> GetCollection()
    {
        ObservableCollection<BookList> myBookList = new ObservableCollection<BookList>();
        foreach (var book in urls)
        {
            myBookList.Add(new BookList(book));
        }
        return myBookList;
    }

    public static ObservableCollection<GroupInfoList> GetItemsGrouped()
    {
        ObservableCollection<GroupInfoList> groups = new ObservableCollection<GroupInfoList>();

        var query = from item in GetCollection()
                    group item by item.BookAddress[9] into g
                    orderby g.Key
                    select new { GroupName = g.Key, Items = g };

        foreach (var g in query)
        {
            GroupInfoList info = new GroupInfoList();

            switch (g.GroupName.ToString())
            {
                case "v":
                    info.Key = "Favorite";
                    break;

                case "w":
                    info.Key = "New";
                    break;

                case "a":
                    info.Key = "Feature";
                    break;

                default:
                    info.Key = g.GroupName;
                    break;
            }

            foreach (var item in g.Items)
            {
                info.Add(item);
            }
            groups.Add(info);
        }
        return groups;
    }
}

还有我的BookListclass和GroupInfoList是这样的:

public class BookList : INotifyPropertyChanged
{
    public string _BookAddress;

    public string BookAddress
    {
        get { return _BookAddress; }
        set
        {
            _BookAddress = value;
            OnPropertyChanged("BookAddress");
        }
    }

    public BookList(string name)
    {
        this.BookAddress = name;
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

public class GroupInfoList : List<object>
{
    public object Key { get; set; }
}

BookListclass是针对ListView的item,如果想在每个item中显示更多的细节,可以在class中添加属性。而 GroupInfoList class 仅针对每个组的 Key

在我的示例中,您的 Uri 格式应始终遵循以下模式:

您可以修改 Headers class 的 GetItemsGrouped() 方法中的代码以满足您的预期模式。

这是这个样本的结果:

如果你想测试我的样本,这里是 it(Grouped List)