1

我有一个Dictionary<string,string>,其中包含一些我想在ListView中显示的数据。 ListView肯定会“看到”正确的项目数(因为我看到第二个TextBlock中的冒号的适当数目),但它不显示KeyValue绑定。将ListView ItemTemplate绑定到字典的键和值<string,string>

我需要Converter什么?

我需要更改并使用ObservableCollection<KeyValuePair<string,string>>吗?

<ListView Grid.Row="1" IsItemClickEnabled="False" 
      SelectionMode="None" IsHitTestVisible="False" 
      IsSwipeEnabled="False" 
      ItemsSource="{Binding SymbolInfoText}"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding Key}"/> 
       <TextBlock Text=": "/> 
       <TextBlock Text="{Binding Value}"/> 
      </StackPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

public Dictionary<string, string> SymbolInfoText 
{ 
    get 
    { 
     if (selectedItem == null) 
     { 
      return new Dictionary<string, string> { { "Error", "No Item Selected" } }; 
     } 
     return selectedItem.GenerateObjectProperties(CurrentLocation, LocalMapManager.Map.Heading); 
    } 
} 
+0

我找不到我们的代码中的错误的正常方式。根据你的描述,这不是绑定的问题。这与'Dictionary'中的数据有关。请使用'.cs'文件的竞争代码更新您的文章。 – 2013-03-12 05:39:35

回答

0

如果要添加项目后呈文(应用程序启动后,建立束缚链接),然后Dictionary<string,string>不会是最好的选择,因为它没有实现INotifyCollectionChanged。尝试在元素添加到字典后立即设置ItemsSource,您将看到实际上项目出现在列表中,您只需更新绑定即可。

所以是的,ObservableCollection<T>将是一个更为优化的解决方案,因为它在发生核心集合更​​改时发送通知。

+0

虽然我手动触发了SymbolInfoText属性的OnPropertyChanged,这就是为什么我很困惑。我在这个问题中增加了一些额外的逻辑,当选择一个项目(因此selectedItem不再为空)时,将调用OnPropertyChanged并更改Dictionary(以便显示三个冒号而不是一个冒号)。由此看来,绑定在那里,但是在字符串周围存在某种类型的错误...? – 2013-03-12 03:51:56

+0

看着你的代码,你试图解决问题的方式有一些固有的错误。你为什么要检查属性getter中的选定项目?另外,什么是selectedItem? – 2013-03-12 03:56:38

+1

一个可观察字典的好资源:http://drwpf.com/blog/2007/09/16/can-i-bind-my-itemscontrol-to-a-dictionary/ ...如果OP是坚定的使用一种字典。 – 2013-03-12 04:00:43

0

试试这个,它会告诉你,你想要什么,但你使用它的方法是不使用集合在WPF

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     this.DataContext = this; 
     InitializeComponent(); 

    } 


    public Dictionary<string, string> SymbolInfoText 
    { 
     get 
     { 
      return new Dictionary<string, string> { { "Error", "No Item Selected" }, { "Error1", "No Item Selected" } }; 


     } 
    } 


} 
相关问题