如何加入 List 并将其与 GridView 块中的 TextBlock 绑定

How to join a List and bind it with a TextBlock in a GridView Block

我想加入一个列表并将它们绑定到 GridView(或 ListView)块中的 TextBlock

让我画个图来说明这个场景。

C#

我有一个 StudentInfo 列表,其中包含 姓名 (string)、ID (int) 和课程 (List<string)

XAML

<ListView.ItemTemplate>
    <DataTemplate x:DataType="data:StudentInfo">
        <StackPanel>
            <TextBlock Text="{x:Bind StudentName}" Margin="1"/>
            <TextBlock Text="{x:Bind ID}" Margin="1"/>
            <!--In the following textblock, I want to show something like this
                "Taken Courses Are - PHY, CHM, MAT"-->
            <TextBlock Text="{x:Bind Courses}" Margin="1"/>
        </StackPanel>
    </DataTemplate>
</ListView.ItemTemplate>

最后TextBlock我想加入一个学生已经修过的所有课程,并用硬编码的文本向他们展示-

"Taken Courses Are - ".

我该怎么做?

您可以简单地使用 IValueConverter 来绑定列表

<TextBlock Text="{x:Bind Courses,Converter={StaticResource ListToStringConverter}}" Margin="1"/>

这里是转换器

public class ListToStringConverter : IValueConverter
{

    public object Convert(object value, Type targetType,
        object parameter, string language)
    {    
        return String.Join(", ", ((List<string>)value).ToArray());
    }

    public object ConvertBack(object value, Type targetType,
        object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

编辑

ListToStringConverter 添加到您的资源

<Page.Resources>
            <local:ListToStringConverter x:Name="ListToStringConverter" ></local:ListToStringConverter>
</Page.Resources>

编写转换器 class 将您的列表转换为逗号分隔的字符串。

XAML代码


    <TextBlock Text="{Binding Path=Courses,Converter={StaticResource CourseToStringConverter}}" Margin="1"/>

课程字符串转换器

[ValueConversion(typeof(List<string>), typeof(string))]
public class CourseToStringConverter: IValueConverter
{
   public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (targetType != typeof(string))
            throw new InvalidOperationException("The target must be a String");

        return "Taken Courses Are - " + String.Join(", ", ((List<string>)value).ToArray());
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}