将列表框与 ObservableCollection 中的 List<string> 绑定
binding a listbox with List<string> inside a ObservableCollection
我在绑定 ObservableCollection 中的列表时遇到问题。
这是我的 XAML :
<ListBox Background="Black" x:Name="Test" ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Foreground="Red" Text="{Binding tags}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这是我的 ObservableCollection。
public ObservableCollection<ArticleJSON> Items { get; private set; }
这是我的 class ArticleJSON :
public class ArticleJSON
{
public string content { get; set; }
public List<string> tags { get; set; }
}
我的列表标签不为空。如果我绑定 "content" 它会完美地工作......
我希望有人能帮助我
您不能直接将 List<string>
绑定到文本块。将您的列表转换为单个字符串并绑定它。为此,您可以尝试使用值转换器。
<TextBlock Text="{Binding Path=tags,Converter={StaticResource ListToStringConverter}}"/>
代码隐藏,
[ValueConversion(typeof(List<string>), typeof(string))]
public class ListToStringConverter : 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");
// strings are joining with a comma, you can use what you prefer
return String.Join(", ", ((List<string>)value).ToArray());
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
<Grid>
<ListBox Background="Black"
x:Name="Test" >
<ListBox.ItemTemplate>
<DataTemplate>
<ListBox Foreground="Red" ItemsSource="{Binding tags}" >
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" Foreground="Red" Height="40"></TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
我在绑定 ObservableCollection 中的列表时遇到问题。
这是我的 XAML :
<ListBox Background="Black" x:Name="Test" ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Foreground="Red" Text="{Binding tags}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这是我的 ObservableCollection。
public ObservableCollection<ArticleJSON> Items { get; private set; }
这是我的 class ArticleJSON :
public class ArticleJSON
{
public string content { get; set; }
public List<string> tags { get; set; }
}
我的列表标签不为空。如果我绑定 "content" 它会完美地工作...... 我希望有人能帮助我
您不能直接将 List<string>
绑定到文本块。将您的列表转换为单个字符串并绑定它。为此,您可以尝试使用值转换器。
<TextBlock Text="{Binding Path=tags,Converter={StaticResource ListToStringConverter}}"/>
代码隐藏,
[ValueConversion(typeof(List<string>), typeof(string))]
public class ListToStringConverter : 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");
// strings are joining with a comma, you can use what you prefer
return String.Join(", ", ((List<string>)value).ToArray());
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
<Grid>
<ListBox Background="Black"
x:Name="Test" >
<ListBox.ItemTemplate>
<DataTemplate>
<ListBox Foreground="Red" ItemsSource="{Binding tags}" >
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" Foreground="Red" Height="40"></TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>