C# 是否将列表集合值添加到要在listview中显示的字符串?
我试图获取列表的值,并将它们写入可以在listview中显示的字符串。在我的例子中,我正在检索一个音乐发布列表,每个发布都有一个艺术家列表 这是我的班级:C# 是否将列表集合值添加到要在listview中显示的字符串?,c#,C#,我试图获取列表的值,并将它们写入可以在listview中显示的字符串。在我的例子中,我正在检索一个音乐发布列表,每个发布都有一个艺术家列表 这是我的班级: class DownloadsAvailable { OAuth oAuth = new OAuth(); public Metadata metadata { get; set; } public List<DownloadsAvailableResult> results { get; set; } /
class DownloadsAvailable
{
OAuth oAuth = new OAuth();
public Metadata metadata { get; set; }
public List<DownloadsAvailableResult> results { get; set; } // List of Songs
public IEnumerator<DownloadsAvailableResult> GetEnumerator()
{
return this.results.GetEnumerator();
}
}
public class DownloadsAvailableResult // Song
{
public int id { get; set; }
public string name { get; set; }
public string title { get; set; }
public List<Artist> artists { get; set; }
public string artistsList { get; set; } // New property to hold string list of artists
}
public class Artist
{
public int id { get; set; }
public string name { get; set; }
public string slug { get; set; }
public string type { get; set; }
}
类下载可用
{
OAuth OAuth=新的OAuth();
公共元数据{get;set;}
公共列表结果{get;set;}//歌曲列表
公共IEnumerator GetEnumerator()
{
返回此.results.GetEnumerator();
}
}
公共类下载savailableresult//Song
{
公共int id{get;set;}
公共字符串名称{get;set;}
公共字符串标题{get;set;}
公开列表艺术家{get;set;}
公共字符串艺术家列表{get;set;}//用于保存艺术家字符串列表的新属性
}
公共级艺术家
{
公共int id{get;set;}
公共字符串名称{get;set;}
公共字符串slug{get;set;}
公共字符串类型{get;set;}
}
和代码隐藏
private async void GetDownloads()
{
OAuth oAuth = new OAuth();
string oAuthVerifier = ApplicationData.Current.LocalSettings.Values["oauth_verifier"].ToString();
string httpMethod = "GET";
string parameters = "status=" + DownloadStatus.available.ToString();
string response = await oAuth.GetData(OAuth.availDownloadsUrl, httpMethod, parameters, oAuthVerifier);
DownloadsAvailable downloads = JsonConvert.DeserializeObject<DownloadsAvailable>(response);
// Foreach loop here to enumerate over list of artists?
this.listDownloads.ItemsSource = downloads;
}
private async void GetDownloads()
{
OAuth OAuth=新的OAuth();
字符串oAuthVerifier=ApplicationData.Current.LocalSettings.Values[“oauth_verifier”].ToString();
字符串httpMethod=“GET”;
string parameters=“status=“+DownloadStatus.available.ToString();
字符串响应=等待oAuth.GetData(oAuth.availDownloadsUrl、httpMethod、参数、oAuthVerifier);
DownloadsAvailable downloads=JsonConvert.DeserializeObject(响应);
//Foreach循环在这里枚举艺术家列表?
this.listDownloads.ItemsSource=下载;
}
我不知道如何枚举艺术家列表,以便将他们合并成一个字符串,绑定到listview中的textblock
谢谢你的帮助
更新
谢谢大家的回答,但我想我没有清楚地解释我的问题。我从web请求中获得的数据返回一个歌曲列表。每首歌可以有多个艺术家。我想做的是为每首歌创作一组艺术家。然后可以将其绑定到listview中的textblock
目前,我通过嵌套两个列表视图来实现这一点,如下所示:
<ListView x:Name="listDownloads" ItemsSource="{Binding DownloadsAvailable}" SelectionChanged="listDownloads_SelectionChanged" HorizontalAlignment="Left" Height="auto" VerticalAlignment="Top" Width="auto">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<Image Source="{Binding images.large.url}" Grid.Column="0" Margin="0,10,0,0" />
<StackPanel Grid.Column="1" VerticalAlignment="Top" Margin="20,0,0,0">
<TextBlock Text="{Binding title}" Style="{StaticResource ListViewItemContentTextBlockStyle}" />
<TextBlock Text="{Binding release.name}" Style="{StaticResource ListViewItemSubheaderTextBlockStyle}"/>
<ListBox ItemsSource="{Binding artists}" ScrollViewer.VerticalScrollBarVisibility="Disabled">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding name}" Margin="2"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
因此,我不想使用嵌套列表框来显示一首歌曲的艺术家,而是希望能够为每首歌曲创建一个艺术家字符串,并将其绑定到文本块
我希望这能把事情弄清楚。谢谢。字符串.Join接受要加入的字符串数组。因此,从艺术家姓名创建这样一个数组:
public string artistsList {
get {
return String.Join(", ", artists.Select(a => a.name).ToArray());
}
}
你真的想要一个二传手吗?您可以从以逗号分隔的艺术家列表中执行此操作;然而,艺术家的其他属性将丢失
set {
artists = value.Split(',')
.Select(s => new Artist{ name = s.Trim() })
.ToList();
}
String.Join
接受要联接的字符串数组。因此,从艺术家姓名创建这样一个数组:
public string artistsList {
get {
return String.Join(", ", artists.Select(a => a.name).ToArray());
}
}
你真的想要一个二传手吗?您可以从以逗号分隔的艺术家列表中执行此操作;然而,艺术家的其他属性将丢失
set {
artists = value.Split(',')
.Select(s => new Artist{ name = s.Trim() })
.ToList();
}
下面是一个例子——假设我有一个列表,该列表的内容如下
- valList[0]=“状态不能为空”
- vlaList[1]=“这是测试”
我的列表变量的声明
var valList = new List<string>
{
"Status can not be empty",
"This is a Test"
};
var msgString = string.Join(", " , valList);
var valList=新列表
{
“状态不能为空”,
“这是一个测试”
};
var msgString=string.Join(“,”,valList);
- msgString将保存以下值-请参见下文
状态代码不能为空,服务请求者合同不能为空
这里是一个示例-假设我有一个列表,该列表的内容如下
- valList[0]=“状态不能为空”
- vlaList[1]=“这是测试”
我的列表变量的声明
var valList = new List<string>
{
"Status can not be empty",
"This is a Test"
};
var msgString = string.Join(", " , valList);
var valList=新列表
{
“状态不能为空”,
“这是一个测试”
};
var msgString=string.Join(“,”,valList);
- msgString将保存以下值-请参见下文
状态代码不能为空,服务请求者合同不能为空
根据您的更新,对于每首歌曲,您希望将该歌曲的艺术家列表合并为一个字符串。也就是说,对于存储到属性中的每首歌曲(DownloadsAvailableResult
),您都需要一个这样的字符串。这使得事情变得更简单,因为每首歌都已经知道自己的列表
更新
根据您的更新,对于每首歌曲,您希望将该歌曲的艺术家列表合并为一个字符串。也就是说,对于存储到属性中的每首歌曲(DownloadsAvailableResult
),您都需要一个这样的字符串。这使得事情变得更简单,因为每首歌都已经知道自己的列表
像这样的东西对你有用吗
string artistNames = string.Join(", ",
downloads.results.SelectMany(r => r.artists.Select(a => a.name)));
更新
我之前没有注意到您的DownloadsAvailableResult
类上有artistsList
属性。如果它只包含艺术家名字,你可以考虑重命名它。