0

我有一个列表框,我正在尝试使用“metro”应用程序进行数据绑定。这是我的xml:

    <ListBox x:Name="ImagesList" Margin="40" Grid.Row="1">
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Key}" />
            </StackPanel>
        </DataTemplate>
    </ListBox>

我创建了一个来源:

        List<KeyValuePair<string, string>> items = 
            new List<KeyValuePair<string, string>>();

        items.Add(new KeyValuePair<string, string>("a", "a"));
        items.Add(new KeyValuePair<string, string>("b", "b"));
        items.Add(new KeyValuePair<string, string>("c", "c"));
        this.ImagesList.ItemsSource = items;

我希望这会在我的应用程序 a、b 和 c 中创建一个文本列表

然而,相反,我为我绑定的每个元素获得了以下文本:

System.Runtime.InteropServices.CLRKeyBaluePairOmpl'2[System.String, System.String]

看起来它正在显示我正在绑定的类型的全名......我做错了什么?

4

2 回答 2

1

您需要将 a 分配ConverterBinding.

将转换器作为 XAML 资源

<src:KeyValueConverter:Key="KeyConverter"/>

将绑定转换器添加到文本源

Text="{Binding Path=ItemsList, Converter={StaticResource KeyConverter}}"

示例转换器代码

public class KeyValueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var kvp = (KeyValuePair)value;
        return kvp.Key;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
于 2012-11-15T21:59:05.123 回答
0

我的 Xaml 也是错误的,它应该是:

 <ListBox x:Name="ImagesList" Margin="40" Grid.Row="1">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Value}" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
于 2012-11-17T07:28:08.627 回答