如何加入 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();
}
}
我想加入一个列表并将它们绑定到 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();
}
}