2012-11-15 104 views
0

我有一个列表框我试图用“metro”应用程序绑定数据。这是我的XAML:Windows 8列表框数据绑定

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

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

回答

1

你需要一个Converter分配给Binding

蜡膏转换为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(); 
    } 
} 
+0
+0

Mayank

+0

我打算将其标记为答案,因为我相信它适用于我的KVP示例。 – Liath

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>