使用ObservableCollection </string>中的List <string>绑定列表框

时间:2015-04-10 07:24:03

标签: c# wpf binding

我在ObservableCollection中的List上绑定时遇到问题。

这是我的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; }

这是我的类ArticleJSON:

public class ArticleJSON
{

    public string content { get; set; }
    public List<string> tags { get; set; }
}

我的列表标签不是空的。如果我绑定&#34;内容&#34;它的工作完美...... 我希望有人可以帮助我

2 个答案:

答案 0 :(得分:1)

您无法直接将List<string>绑定到文本块。将List转换为单个字符串并绑定它。要做到这一点,你可以试试价值转换器。

<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();
    }
}

答案 1 :(得分:0)

  <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>